2012-04-26 19 views
1

Logger.exeを使用してメソッド呼び出しを出力するにはwindbgが必要です。windbgのLogger.exeを使用してメソッド呼び出しを印刷

Logexts.dllを分析した結果、!logexts.logm i sampleapplication.dllは、sampleapplication.dllで行われた呼び出しをwindbg画面に表示します。

しかし、私はsampleapplication.dllで行われたメソッド呼び出しを見ることができません。それ、どうやったら出来るの?

たとえば、サンプルアプリケーションでprint()メソッドがある場合、このメソッドが呼び出されると、windbgスクリーンで印刷する必要があります。

どうすればよいですか?

答えて

1

ログ出力をWinDbg出力ウィンドウに出力しますか?次のコマンドを使用します。

!logexts.logo e d 

これは、出力ウィンドウ

にロギングとすべき出力を可能にし、あなたがリストされているが(F1ヘルプから)モジュールの包含または除外リストを作成するためのものです:

!logexts.logm拡張モジュールは、モジュール包含リストまたはモジュール除外リストを作成または表示します。

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

パラメータ

i は、モジュールの包含リストを使用するロガーを引き起こします。指定されたモジュールで構成されます。

x ロガーにモジュール除外リストを使用させます。 Logexts.dll、kernel32.dll、および指定されたモジュールで構成されます。

Modules 含まれるモジュールまたは除外されるモジュールを指定します。このリストは累積型ではありません。このコマンドを使用するたびに、全く新しいリストが作成されます。複数のモジュールがリストされている場合は、それらをスペースで区切ります。アスタリスク(*)は、すべてのモジュールを示すために使用できます。

備考 パラメータを指定しないと、!logexts.logm拡張子に現在のインクルードリストまたは除外リストが表示されます。

拡張子!logexts.logm x *と!logexts.logm iは同等です。完全に空のインクルードリストになります。

拡張!logexts.logm i *と!logexts.logm xは同等です。その結果、Logexts.dllとkernel32.dllだけを含む除外リストが生成されます。 Loggerは自身をログに記録することができないため、これらの2つのモジュールは常に除外されます。

はここにいくつか例を示します。

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 
+0

ありがとうございました。しかし、これは私のためには機能しません。 !logexts.logmは利用可能なAPIカテゴリを表示します。私はすべて無効になっています。私はそれらを有効にする必要がありますか? – Rockstart

+0

@Rockstart '!logexts.logo e d'は動作しませんか? – EdChum

+0

動作しません。あなたはこれを試してもらえましたか? – Rockstart

0

@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 
+0

の場合、Win32 APIとCOM呼び出しのみがログに記録されていることを示しているようですが、DLLのどのメソッドもログに記録されているとは限りません。 – EdChum

+0

また、有効なカテゴリとモジュールのインクルードリストには、DLLが含まれていますか? :http://windbg.info/doc/1-common-cmds.html#22_logexts – EdChum

+0

@EdChum:はい、それは私のdllを表示し、利用可能なすべてのカテゴリが有効になっています。 – Rockstart

2

を見ていLogExts.dll拡張子はWinDBGのフォルダのwinextの\マニフェストの中に「ヘッダー」ファイルで指定されたコールを記録します。ネイティブ/管理されていない呼び出し(つまり、.NET /管理されていないもの)のみを記録できます。

私はこのツールの元の著者です... 1999年に書かれたマニフェストの多くは、その時点で存在していたMicrosoft APIを反映しています。サードパーティのアプリケーションをデバッグして、最終的にWindows XPになったものと互換性を持たせる方法を理解することが、本来の目的でした。

関連する問題