0

基本的に私はダンプファイルを作成します:

  1. デバッグ中:VC10デバッグ->名前を付けてダンプを保存...
  2. リリース中:Procexp->右クリック->ダンプの保存->フルダンプの作成...

1を介して、VC10(シンボルパス、デバッグソースファイルのすべてのセットアップが適切に設定されている)でダンプファイルを開くことができます。ソースコードを含むすべてのスタック情報と、すべての変数の値を確認できます。

2を介して、VC10(シンボルパス、デバッグソースファイルのすべてのセットアップが適切に設定されている)でダンプファイルを開くことができます。ソースコードですべてのスタック情報を確認できますが、すべての変数の値がありません。ローカル変数をデバッグウォッチウィンドウに配置しても、エラー:シンボル「xxx」が見つかりませんと表示されます。これを2に修正するにはどうすればよいですか?

ダンプデバッグをどのように設定しましたか?

シンボルパスの場合:

アクション->シンボルパスの設定->プロジェクトのDebug&Releaseフォルダーのpdbパスを追加し、MicrosoftSymbolServerを使用します。

デバッグソースパスの場合:

プロジェクトソリューションのダンプ->プロパティ->ソースファイルのデバッグ->プロジェクトファイルフォルダの追加

ところで:同じダンプファイルに対して、WinDbgも使用しており、すべてのスタック情報も表示できます(シンボルとソースパスを正しく設定した後)。

ありがとう

4

2 に答える 2

2

デバッグ ビルドは、可能な限り最高のデバッグ エクスペリエンスを得られるようにするビルドです。ローカル変数を見ることは問題ではありません。

リリース ビルドは、コード オプティマイザーを有効にします。コードに対して多くのことを行いますが、間違いなく最初の被害者はローカル変数です。それらは完全に削除されるか、CPU レジスタに格納される可能性があります。そのようなローカル変数の値を本当に知る必要がある場合は、通常、マシンコードを調べて、どの cpu レジスタに格納されているかを調べる必要があります。ただし、これがスタック トレースに埋め込まれているコード内にある場合、これは機能しません。値はスタックのどこかにプッシュされていたはずです。どこにあるかを見つけることはほとんど不可能です。

最適化されたコードのデバッグは難しく、2 つの方法はありません。デバッグ ビルドでバグを取り除き、リリース ビルドで Hail Mary を実行します。

于 2012-12-13T16:19:18.130 に答える
0

すべての素晴らしい情報に感謝しますが、今日は自分で理由を見つけたと思います!

理由: これはビルドの問題でした。exe が使用する必要のある一部のコンポーネントが正しくビルドされていません!

: 私の場合、"ミニ ダンプ" 7M と "フル ダンプ" 112M は、両方とも procexp から作成された同じジョブを実行します。そして、それらを VS にロードすると、以下にアクセスできます。

  1. すべてのスタック情報
  2. すべての変数情報
  3. スタックをkernel32.dll!_UnhandleExceptionFilerからコードに切り替えると、正確な場所を特定します。

基本的に、私が上と下で行ったように VC10 をセットアップする限り、問題ないはずです。

シンボル パスの場合:

アクション -> シンボル パスの設定 -> プロジェクトのデバッグおよびリリース フォルダーの pdb パスを追加し、Microsoft シンボル サーバーを使用します。

デバッグ ソース パスの場合:

プロジェクト ソリューションのダンプ -> プロパティ -> ソース ファイルのデバッグ -> プロジェクト ファイル フォルダーの追加

于 2012-12-15T12:07:22.517 に答える