最近、WinDbg Command-Line Optionsを読んだ後、windbg を使用してアプリをデバッグする必要があります。いずれかの問題の解決策をいくつか見つけましたが、1 回の実行でこれらすべての問題を解決できるものはありませんでした。
一般的に、私は-cオプションを使用して起動時にブレークポイントを作成し、-logoオプションを使用してロギング コンテンツを静的ファイルに出力し、-pnオプションを使用してアプリを起動するので、最初は次のようなコマンドを使用します。
windbg -pn myapp.exe -logo "log.txt" -c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"'
このコマンドはmyapp.exeを開始し、 WININET!InternetSetCookieExW WIN32 API にブレークポイントを作成します。このブレークポイントに到達すると、 log.txtに情報をダンプしてから ( gコマンドで)続行します。
ただし、まだ解決されていない問題がいくつかあります。以下に実際の要件を示します。
- 私のアプリは子プロセスを作成するため、windbg はメイン プロセスとすべての子プロセスをデバッグできるはずです。
- すべて自動化する必要があるため、windbg はアプリの起動時にブレークポイントを作成し、ブレークポイントに関する情報をログに記録する必要があります
最初のポイントについては、 -oオプションがすべての子プロセスをデバッグすることがわかったので、うまくいくようwindbg -pn myapp.exe -o
です>
しかし残念なことに、-oオプションが指定されている場合、子プロセスが fork されるたびに、windbg がブレークポイントにヒットし、gコマンドを手動で使用して続行する必要があり、これは自動化されていません。
このために、最初のブレークポイントを無視する-gオプションを見つけましたが、それでも重大な問題が発生します。
問題は、-gオプションが指定されている場合、アプリの起動直後に-cオプションで提供されたコマンドを実行できなかったことです。最初のブレークポイントが無視されるため、手動でブレークポイントを設定する必要があり、その後でコマンドを実行できました。そのヒット。
ブレークのイベントを発生させるために-eオプションを試しましたが、結果が得られませんでした。
要約すると、-oオプションと-gオプションを使用して、windbg がすべての子プロセスをキャッチし、プロセスの作成時に最初のブレークポイントに到達しないようにしますが、-cオプションを介してコマンドを挿入できませんでした。
誰かがコマンドラインオプションの正しい組み合わせを提供するのを手伝ってくれてありがとう.