1

VS2010 を使用して CButton をクリックすると例外をスローするこの小さな MFC アプリケーションをコンパイルしました。

リリース モードで、pdb ファイルとマップ ファイルを作成しました。

次に、これらのコマンド symfix と sympath+ を使用して、デバッガーにシンボルの場所を知らせました。.reload の後、g を入力し、例外ボタンをクリックすると、予想どおりにクラッシュしましたが、ここでの問題は、kb を実行すると完全なコール スタックが表示されず、例外の発生元を示すコール スタックが正常に表示されることです。このアプリをデバッグモードでコンパイルすると。

コンパイルオプションについては簡単な問題だと思いますが、明らかに不足しています。

前もって感謝します。

4

2 に答える 2

3

リリース モードでは、コードの最適化がオンになっているため、コンパイラはコードを再配置し、その一部を破棄します。これがおそらく、期待したものが表示されない理由です。[プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [C/C++] -> [最適化] -> [最適化] に移動して、最適化を無効にしてみてください。

于 2012-06-08T02:34:09.447 に答える
1

pdbに完全なシンボルがあることを確認する必要があるため、プライベートシンボルを削除しないように、pdb設定で指定する必要があります。これにより、完全な呼び出しスタックを確実に取得できます。最適化設定によって問題が発生することはありません。

Windowsコードが最適化されていない場合、Windowsコードをデバッグしているときに、シンボルサーバーからMicroSoft pdbを正常に動作させることができるのはなぜですか?

http://msdn.microsoft.com/en-us/library/958x11bc%28v=vs.90%29.aspxの詳細については、これを参照してください。

プロジェクト設定の下で:[構成プロパティ]>[リンカー]>[デバッグ]で、[プライベートシンボルのストリップ]が空になっていることを確認します。

次のように入力して、pdbがコードと一致するかどうかを確認できます。

!chksym mydll

または同じことを行う文書化されていないコマンド:

!itoldyouso mydll
于 2012-06-08T06:48:13.620 に答える