0

Visual Studio 2010 でアクセス違反が発生しました。コールスタックは次のとおりです。 ここに画像の説明を入力

コール スタックのほとんどは、dll のアセンブリ コードです (ほとんど判読できません)。違反の原因となったコード内の行までさかのぼりたいのですが、コール スタックにユーザー関数がないようです。

違反の原因となっている関数内の行を見つけるにはどうすればよいですか? いくつかの設定を調整する必要がありますか?

4

1 に答える 1

2

最適化された C または C++ コードから信頼できるスタック トレースを取得することは困難です。オプティマイザは、診断能力よりも速度を選択します。デバッガーは、このようなコードがスタック フレームを正しく解釈し、呼び出し元のメソッドへの戻りアドレスを見つける方法を知るために、PDB ファイルを必要とします。

明らかに、これらの PDB はありません。関数名ではなく、オペレーティング システムの DLL から生のアドレスを取得しています。これらの PDB を取得するのは非常に簡単です。Microsoft には、サービス パックやセキュリティ更新プログラムを含む Windows のリリースされたバージョン用の PDB を提供するだけの公開サーバーがあります。

そのサーバーについてデバッガーに通知する必要があります。この機能は既定ではオフになっています。VS2010 の場合は特に簡単です。サーバー名はダイアログにあらかじめプログラムされているので、オンにするだけです。ツール+オプション、デバッグ、シンボル、「Microsoft Symbol Servers」の前にあるチェックボックスにチェックを入れます。キャッシュ ディレクトリを設定します。書き込み可能なディレクトリであれば何でも構いません。

デバッグを再開します。最初は PDB をキャッシュするのに時間がかかります。完了すると、大幅に改善されたスタック トレースが表示されます。正確で、Windows DLL の関数名が含まれています。

于 2013-06-21T11:16:45.310 に答える