Page 2 of 2

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

Posted: Sat 08 Feb, 2014 16:02
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).

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

Posted: Mon 17 Feb, 2014 09:54
by John Doe

Latest post of the previous page:

Предлагаемый выше вариант учитывает оба случая.

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

Posted: Mon 17 Feb, 2014 10:12
by Smitis
John Doe wrote:Предлагаемый выше вариант учитывает оба случая.
Не обратил внимание на скобки в return dbgfilter() :oops:

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

Posted: Tue 18 Feb, 2014 19:46
by Smitis
Идея выводить имя файла и номер строки мне понравилась. Но к функции dbgprintfrom сразу захотелось добавить для комплекта dbgprintffrom. Но увеличение количества функций не радует, тем более ещё много вариантов можно придумать.
С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.

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

П.С.
А что, первый пост больше не закрепляется?

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

Posted: Tue 18 Feb, 2014 19:55
by John Doe
Smitis wrote:С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.
Получится не очень удобно (хоть я фильтры не использую, но...)
Во-первых вывод может быть из разных файлов.
Во-вторых при отладке разных файлов фильтр придётся постоянно менять
Smitis wrote:А что, первый пост больше не закрепляется?
http://forum.farmanager.com/viewtopic.php?f=10&t=8293

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

Posted: Tue 18 Feb, 2014 20:17
by John Doe
1. dbgclear - фильтр для этой команды не нужен
2. dbgprint - надо избавиться от ipairs

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

Posted: Tue 18 Feb, 2014 20:42
by Smitis
1. А иначе не сработает.
2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
Получится не очень удобно (хоть я фильтры не использую, но...)
Я использую, но не по имени файла. Просто сама идея с выводом имени файла понравилась. Может потом третий параметр добавлю...

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

Posted: Tue 18 Feb, 2014 20:46
by John Doe
1. А иначе не сработает.
Интересно. Я с фильтром не пробовал, значит вам виднее.
Smitis wrote:2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
Вы не уловили проблему.
ipairs не сможет правильно обработать массив содержаший значения nil
Выше под спойлером приводился пример.

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

Posted: Wed 19 Feb, 2014 07:19
by Smitis
John Doe wrote:ipairs не сможет правильно обработать массив содержаший значения nil
- fixed
+ пустой список в print
Во-вторых при отладке разных файлов фильтр придётся постоянно менять
В DebugView можно перечислить несколько значений для фильтра через точку с запятой.

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

Posted: Wed 19 Feb, 2014 18:37
by John Doe
Smitis wrote:- fixed
+ пустой список в print
?
Последний раз редактировалось Smitis Вт 18 фев, 2014 21:37
Smitis wrote:В DebugView можно перечислить несколько значений для фильтра через точку с запятой.
Это не избавляет от необходимости задавать эти несколько (и их набор тоже будет меняться)

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

Posted: Wed 19 Feb, 2014 20:14
by Smitis
Куда-то изменения подевались :unknown:

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

Posted: Fri 21 Feb, 2014 23:13
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/

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

Posted: Sat 22 Feb, 2014 08:46
by Smitis
Действительно, юникодный символы конвертятся в обычные или в вопросительные знаки.
Выходит что нет особого смысла использовать OutputDebugStringW?
А вдруг в следующей версии Винды задействуют как положено?

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

Posted: Wed 09 Nov, 2016 21:15
by gene.pavlovsky
Отличный модуль, мне понравилось.

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

Posted: Mon 30 Dec, 2019 12:58
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