Модуль для вывода отладочной информации
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Модуль для вывода отладочной информации
Модуль использует функцию 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).
Вывод 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 166 times
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Модуль для вывода отладочной информации
Latest post of the previous page:
А какая разница? Первый был более общий, можно сказать, классически, модуль, возвращает таблицу, как и положено. Но на фоне того, что многие приложения отправляют через OutputDebugString свою информацию и это могут как плагины ФАРа так и другие скрипты, был второй вариант, каждый раз создающий новые функции с новым автоматически добавляемым текстом - "фильтром". Собственно, я только второй и использую. Но и первый, вроде как, имеет право быть, как вариант, на любителя.John Doe wrote:Так один же
Проблема, получается, не в том, что модули были разделены, а что непонятно какой лучше выбрать
Разум когда-нибудь победит.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Модуль для вывода отладочной информации
Не обратил внимание на скобки в return dbgfilter()John Doe wrote:Предлагаемый выше вариант учитывает оба случая.
Разум когда-нибудь победит.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Модуль для вывода отладочной информации
Идея выводить имя файла и номер строки мне понравилась. Но к функции dbgprintfrom сразу захотелось добавить для комплекта dbgprintffrom. Но увеличение количества функций не радует, тем более ещё много вариантов можно придумать.
С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.
По этому так, версия 1.03
- Модуль теперь возвращает таблицу.
- Добавлена функция очистки окна логов dbgclear.
- Фильтр можно задавать числом, 0 - выводим имя lua-файла, вызвавшего функцию, 1 - выводим имя и номер строки.
П.С.
А что, первый пост больше не закрепляется?
С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.
По этому так, версия 1.03
- Модуль теперь возвращает таблицу.
- Добавлена функция очистки окна логов dbgclear.
- Фильтр можно задавать числом, 0 - выводим имя lua-файла, вызвавшего функцию, 1 - выводим имя и номер строки.
П.С.
А что, первый пост больше не закрепляется?
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Модуль для вывода отладочной информации
Получится не очень удобно (хоть я фильтры не использую, но...)Smitis wrote:С другой стороны - если выводить имя файла, так по имени можно и фильтр для DebugView задавать.
Во-первых вывод может быть из разных файлов.
Во-вторых при отладке разных файлов фильтр придётся постоянно менять
http://forum.farmanager.com/viewtopic.php?f=10&t=8293Smitis wrote:А что, первый пост больше не закрепляется?
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Модуль для вывода отладочной информации
1. dbgclear - фильтр для этой команды не нужен
2. dbgprint - надо избавиться от ipairs
2. dbgprint - надо избавиться от ipairs
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Модуль для вывода отладочной информации
1. А иначе не сработает.
2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
Я использую, но не по имени файла. Просто сама идея с выводом имени файла понравилась. Может потом третий параметр добавлю...Получится не очень удобно (хоть я фильтры не использую, но...)
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Модуль для вывода отладочной информации
Интересно. Я с фильтром не пробовал, значит вам виднее.1. А иначе не сработает.
Вы не уловили проблему.Smitis wrote:2. Я понимаю, что без ipairs цикл быстрее, но зачем-то же его придумали...
ipairs не сможет правильно обработать массив содержаший значения nil
Выше под спойлером приводился пример.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Модуль для вывода отладочной информации
- fixedJohn Doe wrote:ipairs не сможет правильно обработать массив содержаший значения nil
+ пустой список в print
В DebugView можно перечислить несколько значений для фильтра через точку с запятой.Во-вторых при отладке разных файлов фильтр придётся постоянно менять
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Модуль для вывода отладочной информации
?Smitis wrote:- fixed
+ пустой список в print
Последний раз редактировалось Smitis Вт 18 фев, 2014 21:37
Это не избавляет от необходимости задавать эти несколько (и их набор тоже будет меняться)Smitis wrote:В DebugView можно перечислить несколько значений для фильтра через точку с запятой.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Модуль для вывода отладочной информации
Выходит что нет особого смысла использовать OutputDebugStringW?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.
P.S.
Попался консольный логгер: http://alter.org.ua/ru/soft/win/dbgdump/
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Модуль для вывода отладочной информации
Действительно, юникодный символы конвертятся в обычные или в вопросительные знаки.
А вдруг в следующей версии Винды задействуют как положено?Выходит что нет особого смысла использовать OutputDebugStringW?
Разум когда-нибудь победит.
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Модуль для вывода отладочной информации
Code: Select all
shmuel 07.01.2015 10:26:06 +0200 - build 468
1. LuaFAR: добавлена функция win.OutputDebugString.