問題タブ [windbg]
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.
com - COM+ メソッドに渡された Windbg find 引数を使用する
COM+ アプリケーションのデバッグ診断ダンプ ファイルを生成しました。分析すると、行 でスレッドがデッドロックしているように見えますOLE32!SwitchSTA
。私のシンボル パスは msdl.microsoft.com/download/symbols を指しています。このメソッドに渡された引数を知る方法はありますか?
一般に、Windbg を使用してメソッド呼び出しの入力引数値を見つけるにはどうすればよいでしょうか?
windbg - windbg 逆アセンブル関数コマンド (uf) にはフォーマットが必要です
notepad.exe をアタッチした後、windbg で uf コマンドを実行しました。コマンドは uf notepad!WinMain でした。次の出力が得られました。
など..すべてのジャンプ命令の後に気付くと、次のような新しいブロックが作成されます
そして
したがって、関数の逆アセンブリのジャンプごとに新しいブロックの作成を省略できる WinDbg の設定を知りたかったのです。U コマンドで取得した方法で出力を取得できないのはなぜですか?
だから私はこのようなオプションを探しています
何か助けはありますか?
reverse-engineering - メモリ内のマインスイーパの鉱山レイアウトを表すデータ構造を見つけるにはどうすればよいですか?
Minesweeper をサンプル アプリケーションとして使用して、リバース エンジニアリングについて学習しようとしています。すべての鉱山を明らかにする単純なWinDbgコマンドに関するこのMSDNの記事を見つけましたが、それは古く、詳細に説明されておらず、実際に私が探しているものではありません.
IDA Pro 逆アセンブラーとWinDbg デバッガーがあり、両方に winmine.exe をロードしました。地雷原を表すデータ構造の場所を見つけるという点で、これらのプログラムのいずれかに関する実用的なヒントを誰かが提供できますか?
WinDbg ではブレークポイントを設定できますが、どの時点で、どのメモリの場所にブレークポイントを設定するかを想像するのは難しいです。同様に、IDA Pro で静的コードを表示すると、地雷原を表す関数またはデータ構造をどこから探し始めればよいかわかりません。
私を正しい方向に導くことができる Stackoverflow のリバース エンジニアはいますか?
debugging - user.dmp には最新のクラッシュのみが含まれていますか?
drwtsn32 によって作成された「user.dmp」に最新のクラッシュのみが含まれているかどうかを知りたかったのです。いくつかのクラッシュをキャプチャしようとしました。しかし、それを分析しようとすると、クラッシュが 1 つしか表示されません。
助けてくれてありがとう、アルン
windows - すでに実行中のプロセスに非侵襲的にアタッチする方法
Visual Studio デバッガーのブレークポイントでプロセスを中断しています。非侵襲モードで cdb (Microsoft のコンソール デバッガー) をいくつでもアタッチできます。
Debug Engine API を使用する独自のプログラムを使用して同じことを達成する方法。
このコードは E_INVALIDARG を引き起こします。この組み合わせは許されませんか?以下のものは機能しますが、GetStackTrace を呼び出すと、E_UNEXPECTED が返されます。
すでにデバッグ ブレークの非侵襲的な方法でプロセスにアタッチし、現在のスタックといくつかのグローバル変数値からいくつかのローカル変数を取得することに興味があります。
次に、!stl のようにシンボルのメモリの内容を繰り返しダンプするために使用される関数を教えてください。ベクトルのような構造の 1 つをダンプするプラグインを作成する必要があります。
ありがとう
windbg - _NT_SYMBOL_PATH形式
windbgをもっと使用しようとしていますが、シンボルキャッシュで問題が発生し続けています。文字列の形式がどうあるべきかは私にはわかりません。
私にはいくつかの要件があります:
- Microsoftのサーバーを使用するhttp://msdl.microsoft.com/download/symbols
- \\ foo\Build1234にアーカイブされているソフトウェアのシンボルを使用する
- c:\ dev\symbolsでローカルキャッシュを使用します
\\ foo \ Build1234にある分散ビルドからのシンボルのアーカイブは、シンボルサーバーとして編成されていません。正しく理解できれば、cacheキーワードを使用する必要があります。
これらの要件を考えると、これは適切にフォーマットされたsrvpathのように見えますか?
編集:
Advanced Windows Debuggingを読み始めたばかりで、cacheキーワードがどのように機能するかを誤解していました。これは、フォルダーが単なるファイルのフォルダーであり、シンボルサーバーではないことをデバッガーに伝える方法だと思いました。Michaelがコメントを残した後、私はそのセクションを読み直して、Michaelが説明したように実際に機能することを確認しました。
今、私はあなたが;を使うとき混乱しています。または*でパス/URLを区切ります。また、srv*プレフィックスが必要な場合。windbgのオンラインヘルプでは、次の例を示しています。
\\ someshareのシンボルはキャッシュされず、Microsoftのシンボルはc:\ mysymbolsにキャッシュされ、c:\ mysymbolsは、cache*ディレクティブの右側にある他のパスのキャッシュとして使用されます。
srv *をときどき使用すると、混乱します。最初と最後のパスの前にsrv*が付いていない理由がわかりません。
編集2:
これはゆっくりと私には意味をなし始めています。srvディレクティブは、通常のシンボルディレクトリではなく、シンボルサーバーに使用されます。だから、私の最初の質問への答えはこれだと思います:
debugging - DIA SDK と DbgEng に必要なヘルプ
DIA SDK と DbgEng (DbgHelp ではない) は、COM ベースの API と DbgHelp に基づいていますか?
もしそうなら、どうすれば C# アプリケーションから DbgEng API を呼び出すことができますか? idl ファイル (生成された tlib ファイルの tlibimp) を使用して DIA ライブラリを C# プロジェクトにインポートできますが、DbgEng には IDL ファイルがありません。
Managed C++ を使用して API を手動でラップするDbgEngの不完全なラッパーを見たことがありますが、多くの機能が欠落しています。マネージ ラッパーを作成せずに C# で DbgEng.DLL を自動的にインポートできますか?
第 2 に、DIA SDK では、DbgEng のように、プロセスをアタッチしてメモリを調査 (および式を評価) することができますか、それとも pdb ファイルからシンボルを取得するだけですか? これまでのところ、pdbファイルのみを解析するDia2dumpが唯一の例です。
c++ - 停止に失敗したアプリの診断
私たちの Windows アプリはメモリ内でハングアップすることが多く、windbg を使用して問題を追跡しようとしています。私はwindbgに非常に慣れていないため、いくつかのアドバイスを使用できます(ただし、Advanced Windows Debuggingを読み始めました)。
このアプリは、VB で記述された C++ オブジェクトと COM オブジェクトが混在しています。時折、アプリを終了すると、アプリが消えたように見えますが、タスク マネージャーでは、アプリがメモリ内でぶらぶらしていて、明らかにアイドル状態であると表示されます。
!threads は私にこれを示しています:
私の訓練されていない目には、ファイナライズ キューがシングル スレッド アパートメントによってブロックされているため、生き続けているように見えます。これは合理的に思えますか?
~0kb の収量:
~6kb 収量:
ここで少しコースを修正していただければ幸いです。ブロックされたファイナライザーの推測が妥当であると思われる場合は、お知らせください。また、何がブロックされているのかを正確に把握するためのアドバイスをいただければ幸いです。
編集:
Shane は !analyze からの出力を求めました。これは実際には別のダンプからのものです - 私はそれらをたくさん持っていますが、それらはすべてほとんど同じように見えます.
com - COM インターフェイスから公開された API のブレークポイント
それらが1つのインターフェースであるとしましょう
これはバイナリ dll の一部です。これのソースコードはありません。
Windbg を使用して、このバイナリ dll のインターフェイス Ifoo から公開されている foo() API にブレークポイントを設定できますか?
Windbg を使用してバイナリ dll にブレークポイントを設定できることはわかっていますが、COM を使用する場合はわかりません。