Поделиться через


Использование отладчика и Logexts.dll

Одним из способов активации средства ведения журнала является запуск CDB или WinDbg и подключение к целевому приложению в пользовательском режиме, как обычно. Затем используйте команду расширения !logexts.logi или !logexts.loge .

Это приведет к вставке кода в текущей точке останова, который будет переходить к подпрограмме, которая загружает и инициализирует Logexts.dll в процессе целевого приложения. Это называется внедрением средства ведения журнала в целевое приложение.

На самом деле будут запущены два экземпляра Logexts.dll, так как этот модуль является библиотекой DLL расширения отладчика и программой, внедренной в целевое приложение. Отладчик и целевые экземпляры Logexts.dll обмениваться данными через общий раздел памяти, который включает дескриптор выходных файлов, текущую маску категории и указатель на выходной буфер журнала.

Присоединение к целевому приложению

Сведения о присоединении отладчика к целевому приложению см. в разделах Отладка процесса User-Mode с помощью WinDbg или Отладка процесса User-Mode с помощью CDB.

Использование команд расширения средства ведения журнала

Полный синтаксис каждого расширения см. на его справочной странице.

!logexts.logi
Внедряет средство ведения журнала в целевое приложение. Это инициализирует ведение журнала, но не включает его.

!logexts.loge
Включает ведение журнала. Если !logexts.logi не использовался, это расширение инициализирует и включает ведение журнала.

!logexts.logd
Отключает ведение журнала. Это приведет к удалению всех перехватчиков API, чтобы позволить программе работать свободно. Перехватчики COM не удаляются, так как их невозможно повторно включить.

!logexts.logo
Отображает или изменяет параметры вывода. Возможны три типа выходных данных: сообщения, отправляемые непосредственно в отладчик, текстовый файл или LGV-файл. LGV-файл содержит гораздо больше сведений, чем два других; Его можно считывать с помощью LogViewer.

Если отключить вывод текстового файла, по-прежнему будет создан файл .txt нулевого размера. Это может перезаписать ранее сохраненный текстовый файл в том же расположении.

!logexts.logc
Отображает доступные категории API, определяет, какие категории будут регистрироваться, а какие нет, а также api, содержащиеся в любой категории.

Если категория отключена, обработчики для всех API в этой категории будут удалены, чтобы больше не было накладных расходов на производительность. Перехватчики COM не удаляются, так как их невозможно повторно включить.

Включение только определенных категорий может быть полезно, если вас интересует только определенный тип взаимодействия программы с Windows, например операции с файлами. Это уменьшает размер файла журнала, а также снижает влияние средства ведения журнала на скорость выполнения процесса.

!logexts.logb
Отображает или очищает текущий выходной буфер. Для повышения производительности выходные данные журнала записываются на диск только при заполнении выходного буфера. По умолчанию буфер составляет 2144 байта.

Так как буферная память управляется целевым приложением, автоматическая запись буфера в файлы журналов на диске не будет происходить при нарушении доступа или какой-либо другой неуправляемой ошибке в целевом приложении. В таких случаях эту команду следует использовать для ручной очистки буфера на диск. В противном случае последние зарегистрированные API-интерфейсы могут не отображаться в файлах журнала.

!logexts.logm
Отображает или создает список включения и исключения модулей. Часто желательно регистрировать только те вызовы API, которые выполняются из определенного модуля или набора модулей. Для этого средство ведения журнала позволяет указать список включения модулей или список исключений модулей. Например, можно использовать список включения, если требуется регистрировать вызовы только из одного или двух модулей. Если вы хотите регистрировать вызовы, выполненные из всех модулей, кроме короткого списка модулей, следует использовать список исключений. Модули Logexts.dll и Kernel32.dll всегда исключаются, так как средство ведения журнала не может регистрировать себя.