問題タブ [dbgeng]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - IDebugControl::WaitForEvent が 1 回動作すると、E_HANDLE が返されます
Debugger Engine APIを利用する小さなツールを作成しようとしていますが、成功は非常に限られています。
IDebugClientおよびIDebugControlインスタンスを取得でき、そこから既に実行中のユーザー プロセスにアタッチできます。次に、メイン ループに入り、WaitForEvent、OutputStackTrace、SetExecutionStatus ( DEBUG_STATUS_GO
) を呼び出して繰り返します。本質的に、これは非常に大雑把なサンプリング ベースのプロファイラーになります。
これまでのところ良い..
私のループは 1 回の完全な繰り返しで実行され、スタック トレースが表示され、ターゲット プロセスが実行状態に戻ることがわかります。
私が抱えている問題は、2回目の繰り返しでへの呼び出しがWaitForEvent
返されるE_HANDLE
ことです(「ハンドルが無効です」)。このエラーが返される理由がドキュメントに表示されません。なぜこれが起こっているのか誰にも分かりますか?
debugging - IDebugSymbols::GetNameByOffset とオーバーロードされた関数
IDebugSymbols::GetNameByOffsetを使用していますが、同じ名前をオーバーロードするさまざまな関数に対して同じシンボル名を取得していることがわかります。
たとえば、シンボルを検索しているコードは次のようになります。
実行時に、これらの関数のそれぞれからの命令のアドレスを取得したら、使用GetNameByOffset
して 2 つをどうにかして区別したいと思います。ここに記載されているように、フラグとフラグを切り替える SetSymbolOptionsを呼び出して実験しましたが、うまくいきませんでした。SYMOPT_UNDNAME
SYMOPT_NO_CPP
デバッガーエンジンの世界でこれらをシンボルに区別する方法を知っている人はいますか?
編集:提案された解決策に対するマイナーな修正について、受け入れられた回答についてコメントしてください。
debugging - Illegal Instruction 例外をデバッグするにはどうすればよいですか?
mdbglib からdbgengを使用しようとすると、この例外が発生します: ASDumpAnalyzer.exe の 0x037ba4f4 (dbgeng.dll) で最初のチャンス例外: 0xC000001D: 不正な命令。これをデバッグする方法を知りたいですか?
アセンブリ命令 vmcpuid をスローしています。その命令をステップオーバーすると、コードは期待どおりに機能します。
スタックトレース:
windbg - WinDbg、読み込まれたモジュールのシンボル サーバー パスを表示します (シンボルが読み込まれなかった場合でも)?
DbgEng API を使用せずに WinDbg から、読み込まれたすべてのモジュールのシンボル サーバー パス (つまり、 PdbSig70 および PdbAge ) を表示する方法はありますか?
そんなこと知ってる
シンボルがロードされたモジュールに対してこれを行います。問題を診断するために、ロードされなかったシンボルのこれらのパスを知りたいです。DbgEng API を利用しなくてもこれが可能かどうかは誰にもわかりませんか?
編集:
私はまた、あなたが使用できることを理解しています
シンボルの読み込みに関するエラー メッセージを表示します。これには役立つ出力がありますが、必要な他の出力とインターリーブされており、「lml」のように単純で明確ではありません
.net - カスタム アプリケーションで DbgEng 拡張 DLL を使用できますか?
WinDbg なしで DbgEng 拡張機能を使用できるかどうか知りたいです。たとえば、マネージ .NET アプリケーションから DbgEng 拡張機能を使用することは可能ですか?
よろしく、レムジー
c++ - WinDbg 拡張機能からユーザー ストリームを抽出するにはどうすればよいですか?
ダンプにカスタム ストリームを埋め込みました (つまり、UserStreamParam 引数をMiniDumpWriteDump関数に渡しました)。現在、WinDbg 拡張機能からストリームを抽出しようとしています。( MiniDumpReadDumpStream関数を使用してストリームを取得できることを確認したことに注意してください)。
DEBUG_REQUEST_READ_USER_MINIDUMP_STREAMリクエストでIDebugAdvanced2::Requestメソッドを使用しています。標準ストリームからデータを取得できます。たとえば、次のスニペットは、その他の情報ストリームのコンテンツを正しく取得します。
ただし、独自のストリームを取得しようとすると、エラー (0x80070570、ERROR_FILE_CORRUPT) が発生し、WinDbg が出力されます。
同じメッセージが.dumpdebug
出力の一部として表示されることに注意してください。
何が問題ですか?ユーザー ストリームのコンテンツを取得するにはどうすればよいですか?
dll - dbgeng - C ++で拡張DLLをロードしますか?
dbgeng.dll を使用して、システム全体のクラッシュ ダンプを 1 つロードする 1 つのアプリケーションを作成しました。(!vad) のような WinDbg コマンドのいくつかを使用したい - そのためには、exts.dll、ext.dll、kext.dll、kexts.dll などの他の dll が必要です。これらの dll がすべてあり、_NT_DEBUGGER_EXTENSION_PATH が適切に設定されています。WinDbg GUI を使用すると、.chain コマンドで、これらの dll がすべて読み込まれていることがわかりますが、コードから実行しようとすると、これらの dll が読み込まれていることがわかりません。また、Execute (.load....) を使用してこれらの dll をロードしようとすると、エラーがスローされます - 「LoadLibrary('...') の呼び出しに失敗しました。Win32 エラー 0n193」。私も !load を試しました - どちらも私のコードでは機能しませんでした。しかし、すべてが GUI で完全に機能します。これらすべての dll を自分の C++ コードにロードする方法がわかりません。
誰でもここで私を助けてくれませんか? 助けていただければ幸いです。
-arb
c++ - 自分の拡張機能をwindbgに認識させることができません
残念ながら、なんらかの理由で、windbg に拡張機能を認識させることができませんでした。
すべて正常にコンパイルされますが、windbg から拡張機能をロードしようとすると、次のようになります。
.dll を IDA Pro Free にロードし、エクスポートを確認すると、「ヘルプ」があります。私は何時間もこれを理解しようとしてきました。あなたが提供できるどんな助けも非常に高く評価されます. どうもありがとう。
c++ - DbgEng - コールバック以外でコマンドの出力を取得する
Microsoft の DbgEng を使用して、スタンドアロンのデバッガー アプリを作成します。コマンドを追加の IDebugControl インスタンスに送信する 2 番目のスレッドを開き、この IDebugControl Execute メソッド呼び出しの特定の出力を取得したい (そして tcp 接続を介して送信したい)。
メインスレッドからの IDebugControl もコマンドを Execute() に送信し、出力が混在する可能性があるため、問題があります。"g" (go) などのコマンドを実行すると、WaitForEvent() が呼び出され、イベントが発生するまでターゲットに関する詳細情報を取得できないため、2 つ目のスレッドが必要です。
そのための解決策が必要です。
2 番目の IDebugControl は、逆アセンブル行、メモリ ダンプなど、データのみの要求を送信する操作に使用されます。他のコールバックをそれに置くことができます。
私のための解決策はありますか?