Использование Logger.exe в windbg для печати вызовов методов

Мне нужно windbg, чтобы напечатать вызовы методов, используя Logger.exe.

Проанализировав Logexts.dll, я узнал, что ! Logexts.logm i sampleapplication.dll выводит вызовы, сделанные в sampleapplication.dll, на экран windbg.

Но я не могу увидеть вызовы методов, сделанные в sampleapplication.dll. Как я могу это сделать?

Предположим, что если в примере приложения есть метод print(), то при вызове этого метода он должен быть напечатан на экране windbg.

Как я могу это сделать?

3 ответа

Расширение LogExts.dll будет регистрировать только те вызовы, которые указаны в файлах заголовка в winext \manifest папки WinDBG. Он может регистрировать только собственные / неуправляемые вызовы (то есть, нет.NET/ управляемые вещи).

Я был первым автором этого инструмента... Он был написан в 1999 году, и большая часть этого манифеста отражает API-интерфейсы Microsoft, которые существовали в то время. Первоначальная цель состояла в том, чтобы отлаживать сторонние приложения, чтобы выяснить, как сделать их совместимыми с тем, что в итоге стало Windows XP.

Итак, вы хотите, чтобы логирование выводилось в окно вывода WinDbg? используйте следующее:

!logexts.logo e d

это включает регистрацию и должно выводиться в окно вывода

тот, который вы перечислили, предназначен для создания списка включения или исключения модуля (из справки F1):

Расширение! Logexts.logm создает или отображает список включения модуля или список исключения модуля.

    !logexts.logm i Modules 
!logexts.logm x Modules 
!logexts.logm 

параметры

i Заставляет Logger использовать список включения модуля. Он будет состоять из указанных модулей.

x Заставляет Logger использовать список исключений модуля. Он будет состоять из Logexts.dll, kernel32.dll и указанных модулей.

Modules Определяет модули, которые будут включены или исключены. Этот список не является накопительным; каждое использование этой команды создает совершенно новый список. Если в списке несколько модулей, разделите их пробелами. Звездочка (*) может использоваться для обозначения всех модулей.

Заметки Без параметров расширение! Logexts.logm отображает текущий список включений или список исключений.

Расширения! Logexts.logm x * и! Logexts.logm i эквивалентны: они приводят к совершенно пустому списку включений.

Расширения! Logexts.logm i * и! Logexts.logm x эквивалентны: они приводят к списку исключений, который содержит только Logexts.dll и kernel32.dll. Эти два модуля всегда исключаются, потому что Logger не разрешено регистрировать себя.

Вот некоторые примеры:

0:001> !logm
Excluded modules:
  LOGEXTS.DLL      [mandatory]
  KERNEL32.DLL     [mandatory]
  USER32.DLL
  GDI32.DLL
  ADVAPI32.DLL

0:001> !logm x winmine.exe
Excluded modules:
  Logexts.dll      [mandatory]
  kernel32.dll     [mandatory]
  winmine.exe

0:001> !logm x user32.dll gdi32.dll
Excluded modules:
  Logexts.dll      [mandatory]
  kernel32.dll     [mandatory]
  user32.dll
  gdi32.dll

0:001> !logm i winmine.exe mymodule2.dll
Included modules:
  winmine.exe
  mymodule2.dll

@EdChum:

Логи видны. Но не вызовы метода.

У меня есть кнопка на форме. Я вызываю method1() при нажатии этой кнопки. Но в журнале я вижу только это,

`Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "GetDlgItem") -> 0x77648510
Thrd 1bcc 0012B8A9 GetDlgItem( 0x0001083A 0x00000000) -> NULL [FAIL]
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "IsWindowVisible") -> 0x77656939
Thrd 1bcc 009718E6 IsWindowVisible( 0x0001083C) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "IsWindowEnabled") -> 0x7764C921
Thrd 1bcc 009718E6 IsWindowEnabled( 0x0001083C) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "SetCapture") -> 0x77676B2A
Thrd 1bcc 0012BBFE SetCapture( 0x0001083C) -> NULL [FAIL]
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "NotifyWinEvent") -> 0x7765F299
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "InvalidateRect") -> 0x77657BC9
Thrd 1bcc 00972610 InvalidateRect( 0x0001083C [0x0024E88C] -> 0 , 0 , 75 , 23  FALSE) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "MapWindowPoints") -> 0x77657915
Thrd 1bcc 009726C7 MapWindowPoints( 0x0001083C NULL 0x00000001) -> 16711916 ( [0x01B30B24] -> 286 , 269 )
Thrd 1bcc 00972610 InvalidateRect( 0x0001083C [0x0024E804] -> 0 , 0 , 75 , 23  FALSE) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "UpdateWindow") -> 0x77652BD9
Thrd 1bcc 009718E6 UpdateWindow( 0x0001083C) -> TRUE
Thrd 1bcc 009726C7 MapWindowPoints( 0x0001083C NULL 0x00000001) -> 16711916 ( [0x01B32AE8] -> 286 , 269 )
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "WindowFromPoint") -> 0x77676D0C
Thrd 1bcc 0012B98C WindowFromPoint( 286 269) -> 0x0001083C
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "ReleaseCapture") -> 0x7764C49E
Thrd 1bcc 0012B11F ReleaseCapture() -> TRUE
Другие вопросы по тегам