Модуль для вывода отладочной информации

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Модуль для вывода отладочной информации

Post by Smitis »

Модуль использует функцию OutputDebugStringW, посылающюю стpоку отладчику, если он пpисутствует.
Вывод OutputDebugStringW может перехватываться утилитой DebugView, в результате получаем хорошее средство для вывода отладочных данных не устанавливая никаких отладчиков.

Модуль содержит четыре функции:
print(...) - аналог стандартной функции print, если параметров несколько, между ними выводится текст-разделитель. Текст-разделитель можно поменять непосредственно в скрипте, по умолчанию это один символ табуляции.
printf(fmt,...) - аналог С-шной функции, обёртка над print и string.format
clear() - очистка окна DebugView
filter(filt,delim) - при вызове функции будут созданы функции аналогичные предыдущим, но при вызове которых в начало каждой выводимой строки будет добавляться текст, заданный параметром filt:
- пустая строка - ничего не будет добавляться,
- не пустая строка - будет добавлена в начало каждой строки,
- числовое значение 0 - в начало каждой строки будет добавлено имя исходного файла lua,
- числовое значение, отличное от 0 - в начало каждой строки будет добавлено имя исходного файла и номер строки.
Не пустое значение filt будет отделено от основного текста пробелом. После имени исходного файла и после номера строки будут добавлены двоеточия.
Параметр delim, если присутствует, задаёт новую строку-разделитель параметров для print.




Использование фильтра сделано для удобства использования фильтра в DebugView. Так для приведённого выше примера 2 задаём в DebugView фильтр "FAR:" (без кавычек) который с большой вероятностью отсеет весь левый "мусор", который выводят другие программы (например, этим грешит Far2->Far3 plugin wrapper) и при этом не надо указывать фильтр каждый раз. В случае, если параметр filt задан числовым значением, для фильтра DebugView можно использовать имя исходного файла.

Установка: поместить модуль в папку %farprofile%\macros\modules

Для вывода русского и пр. текста модули должны быть в кодировке CP 65001 (UTF-8).
Attachments
dbgprint.1.04.7z
(1.53 KiB) Downloaded 137 times
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

Latest post of the previous page:

John Doe wrote:Так один же
А какая разница? Первый был более общий, можно сказать, классически, модуль, возвращает таблицу, как и положено. Но на фоне того, что многие приложения отправляют через OutputDebugString свою информацию и это могут как плагины ФАРа так и другие скрипты, был второй вариант, каждый раз создающий новые функции с новым автоматически добавляемым текстом - "фильтром". Собственно, я только второй и использую. Но и первый, вроде как, имеет право быть, как вариант, на любителя.
Проблема, получается, не в том, что модули были разделены, а что непонятно какой лучше выбрать :)
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Модуль для вывода отладочной информации

Post by John Doe »

Предлагаемый выше вариант учитывает оба случая.
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

John Doe wrote:Предлагаемый выше вариант учитывает оба случая.
Не обратил внимание на скобки в return dbgfilter() :oops:
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

Идея выводить имя файла и номер строки мне понравилась. Но к функции dbgprintfrom сразу захотелось добавить для комплекта dbgprintffrom. Но увеличение количества функций не радует, тем более ещё много вариантов можно придумать.
С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.

По этому так, версия 1.03
- Модуль теперь возвращает таблицу.
- Добавлена функция очистки окна логов dbgclear.
- Фильтр можно задавать числом, 0 - выводим имя lua-файла, вызвавшего функцию, 1 - выводим имя и номер строки.

П.С.
А что, первый пост больше не закрепляется?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Модуль для вывода отладочной информации

Post by John Doe »

Smitis wrote:С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.
Получится не очень удобно (хоть я фильтры не использую, но...)
Во-первых вывод может быть из разных файлов.
Во-вторых при отладке разных файлов фильтр придётся постоянно менять
Smitis wrote:А что, первый пост больше не закрепляется?
http://forum.farmanager.com/viewtopic.php?f=10&t=8293
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Модуль для вывода отладочной информации

Post by John Doe »

1. dbgclear - фильтр для этой команды не нужен
2. dbgprint - надо избавиться от ipairs
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

1. А иначе не сработает.
2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
Получится не очень удобно (хоть я фильтры не использую, но...)
Я использую, но не по имени файла. Просто сама идея с выводом имени файла понравилась. Может потом третий параметр добавлю...
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Модуль для вывода отладочной информации

Post by John Doe »

1. А иначе не сработает.
Интересно. Я с фильтром не пробовал, значит вам виднее.
Smitis wrote:2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
Вы не уловили проблему.
ipairs не сможет правильно обработать массив содержаший значения nil
Выше под спойлером приводился пример.
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

John Doe wrote:ipairs не сможет правильно обработать массив содержаший значения nil
- fixed
+ пустой список в print
Во-вторых при отладке разных файлов фильтр придётся постоянно менять
В DebugView можно перечислить несколько значений для фильтра через точку с запятой.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Модуль для вывода отладочной информации

Post by John Doe »

Smitis wrote:- fixed
+ пустой список в print
?
Последний раз редактировалось Smitis Вт 18 фев, 2014 21:37
Smitis wrote:В DebugView можно перечислить несколько значений для фильтра через точку с запятой.
Это не избавляет от необходимости задавать эти несколько (и их набор тоже будет меняться)
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

Куда-то изменения подевались :unknown:
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Модуль для вывода отладочной информации

Post by John Doe »

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx wrote:OutputDebugStringW converts the specified string based on the current system locale information and passes it to OutputDebugStringA to be displayed. As a result, some Unicode characters may not be displayed correctly.
Выходит что нет особого смысла использовать OutputDebugStringW?

P.S.
Попался консольный логгер: http://alter.org.ua/ru/soft/win/dbgdump/
User avatar
Smitis
Posts: 1646
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 42 times

Re: Модуль для вывода отладочной информации

Post by Smitis »

Действительно, юникодный символы конвертятся в обычные или в вопросительные знаки.
Выходит что нет особого смысла использовать OutputDebugStringW?
А вдруг в следующей версии Винды задействуют как положено?
Разум когда-нибудь победит.
gene.pavlovsky
Posts: 166
Joined: Tue 16 Feb, 2010 17:55
Has thanked: 11 times
Been thanked: 8 times

Модуль для вывода отладочной информации

Post by gene.pavlovsky »

Отличный модуль, мне понравилось.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Модуль для вывода отладочной информации

Post by John Doe »

Code: Select all

shmuel 07.01.2015 10:26:06 +0200 - build 468

1. LuaFAR: добавлена функция win.OutputDebugString.
И альтернатива debugview: https://github.com/CobaltFusion/DebugViewPP
Post Reply

Return to “Обсуждение макросов”