-2

完全なクラッシュ ダンプを作成する API が利用できるかどうかを知りたいです。

現在、私はMiniDumpWithFullMemory でMiniDumpWriteDump () API を使用しています。しかし、作成されたダンプから分析する情報があまり得られません。

4

1 に答える 1

-1

コール スタックとメモリ情報が必要だとおっしゃいましたが、どちらもデバッグに役立ちます =)!

コール スタック

クラッシュ ダンプ ファイルからコール スタックがどのように作成されるかを知っておくと役立ちます。これは、コール スタックがどのように生成されるかについての MSDN からの引用です。ここで最も関連性の高いポイントを取り出しましたが、完全な読み取りリンクの価値があります。

  • クラッシュしたアプリケーションをデバッグしている場合、デバッガーは、クラッシュの原因となったスタック上の関数を表示しようとします。PDB ファイルがないと、デバッガーは関数名、そのパラメーター、またはスタックに格納されているローカル変数を解決できません。
  • 現在のスタック上の関数が Omit Frame Pointers (/Oy) 最適化を使用してコンパイルされた場合、およびシンボルが存在しない場合、デバッガーはどの関数が現在の関数を呼び出したかを確実に判断できません。
  • シンボルが見つからない、またはシンボルが読み込まれていないという警告が表示された場合は、その時点からスタックを信頼しないでください。
  • コール スタック内のライブラリに使用可能な PDB がない場合でも、それらがフレーム ポインターを使用してコンパイルされている限り、デバッガーは親関数を正しく推測できるはずです。Windows XP Service Pack 2 以降、すべての Windows DLL および実行可能ファイルは、FPO を無効にしてコンパイルされます.Windows XP SP2 より前のバージョンの Windows では、すべてのオペレーティング システム バイナリは、正確なデバッグとプロファイリングを可能にするために、FPO 情報を含む一致するシンボル ファイルを必要とします。 .
  • 64 ビットのネイティブ実行可能ファイルをデバッグする場合、有効なスタック トレースを生成するためにシンボル ファイルは必要ありません。これは、x64 オペレーティング システムとコンパイラがシンボル ファイルを必要としないように設計されているためです。ただし、関数名、呼び出しパラメーター、およびローカル変数を取得するには、シンボル ファイルが必要です。

あなたが実際に既に使用している Windows エラー報告 (API) を引き続き調べます。具体的には、ローカル クラッシュ ダンプの設定です。レジストリ キーを使用してそれらを有効にし、DumpType=2 を設定して「フル ダンプ」を有効にすることができます。コードからクラッシュ ダンプ ファイルを生成する必要がある場合は、クラッシュ ダンプ分析に関するこの MSDN 記事の最適化を試してください。

レジストリ設定を使用してローカル クラッシュ ダンプを設定する方法の詳細については、「ユーザー モード ダンプの収集」を参照してください。または、クラッシュ ダンプ分析ファイルで最適化を試して、PDB があることを確認してください =)。

楽しいデバッグ。

于 2016-02-26T21:30:41.253 に答える