0

クラッシュダンプをデバッグしようとしていますが、スタック上の変数の値を確認したいと思います。問題は、いくつかのメソッドがリリースビルドにインライン化されていることですが、これの変数(dv)をダンプしたいと思います。

スタックフレームに移動してdvコマンドを実行すると、その特定の関数のすべての変数が表示されますが、インライン呼び出し内の変数は表示されません。

uf(unassmeble function)コマンドを実行してアセンブリコードを確認することはできますが、それを理解するのは大変な作業です。

4

2 に答える 2

4

通常、最適化されたビルドでは不可能です。オプティマイザーは、変数にメモリを割り当てないことを決定する可能性があるため、アセンブリ コードを調べて、変数がどのレジスタにあるかを判断することが唯一の方法です。さらに、「フレーム ポインターを省略する」スイッチがオンの場合、デバッガーはスタックに割り当てられた変数を正しく表示しません。

関心のある変数をファイルに記録するコードを追加してみてください。

于 2012-08-16T08:57:57.687 に答える
1

残念ながら、分解してこれを理解する必要があります。これにまだ慣れていない場合は、練習を始めるのに最適な時期です。これは、難しい問題をデバッグするための貴重なスキルです。

また、今は役に立ちませんが、Visual Studio 2012 によって生成された PDB ファイル形式は、インライン関数をより適切に追跡できるようになりました。したがって、将来的には、この特定の状況はほとんどの場合に軽減されるはずです。この機能の詳細については、次を参照してください。

http://dotnet.dzone.com/news/debugging-optimized-code

于 2012-08-16T14:27:34.397 に答える