質問

彼が特定の操作をするときに経験した顧客によるプログラムを開発しました。これは常に同じ場所でも同じデータで起こりません、そしてさらに、それは私の地元の開発機や私のテスト仮想マシンでも私のテスト仮想マシンでも起こらず、私のテスト仮想マシン(全ての現像機器もありません)。

これらの条件を考慮すると、どの関数がクラッシュしているかを確認するには、マップでコンパイルすることを決定しました(オプション/マップを使用してプロパティ - > Linker-> Debuggerの設定で有効)。

正しく理解した場合、プログラムがオフセットエラーをチェックしてから、列RVA +ベースの下のマップで検索します。

     Address                         Publics by Value                                      Rva+Base       Lib:Object
 0001:00037af0       ?PersonalizzaPlancia@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00438af0 f   DlgGestioneDatiProgetto.obj
 0001:00038000       ?SalvaTemporanei@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00439000 f   DlgGestioneDatiProgetto.obj
.

実際には、私のクラッシュはオフセット時に起こります:

00038C90
さん、この方法のどこかであると考えるべきです。

MosaicoDialogs::CDlgGestioneDatiProgetto::PersonalizzaPlancia
.

しかし、これは絶対的に可能であるので、コンピュータが間違っていることがないと仮定して、私はそれを悪い人です。

誰かが私に正しい方法で地図を読む方法を説明することができますか?

役に立ちましたか?

解決

マップファイルの読み取りクラッシュの場所を見つけるための地図ファイルの読み取りは、このコードプロジェクトの記事でうまく説明されています。

http:///www.codeProject。COM /記事/ 3472 / Finding-Crash-Information-Map-File

hepsは助けます。

他のヒント

気にしない - 代わりに、シンボルを有効にしてプロジェクトを構築し、それらをPDBファイルに削除します。

プログラムを少し変更するには、未処理例外ハンドラ

新しくコンパイルされたプログラムを顧客に与える、そしてそれがクラッシュするときにminidumpwritedump。

この.dmpファイルをあなたに送信するように顧客に依頼し、それからあなたは単にVisual Studio(またはWindbg)で読み込まれ、それはプログラムへのシンボルを一致させ、そしてコードを一致させるでしょう。正確なコードと関与するいくつかの変数を見ることができるはずです。 (VSを使用している場合は、.dmpファイルをロードすると、右上の角がデバッグを開始するオプションになりますが、クラッシュのポイントでデバッグを開始することができます)

最初にローカルに試してください - プログラムのどこかにDIVをゼロにして、実行後にダンプをデバッグできるかどうかを確認します。プログラムのビルドごとにまったく同じシンボルファイルを保持する必要があります。それらは正確に一致します。何も変更されていなくても、1つのビルドのシンボルファイルが別のビルドに一致することを期待することはできません。

この種のもののためのチュートリアルがあります。これ1 CodeProject から、必要なものを説明したようです。

PostMortemデバッグの場合、ではなく、マップファイルの使用が必要であるという代替手段があります。むしろ、それはあなたがいくつかのhref="http://msdn.microsoft.com/en-us/library/windows/desktop/bb513638%28v=vs.85%29を有効にするための単純なレジストリスクリプトを作成する必要があるでしょう。 ASPX "REL=" NOFOLLOW "> WER (Windowsエラー報告)クラッシュダンプファイルをトラップするフラグ。まず、デバッグシンボルでアプリケーションを構築してください。次に、収集ユーザーモードダンプ。基本的には、「localdumps」キーの下にあるサブキーを作成します。このサブキーは、アプリケーションの名前、たとえば "myApplication.exe"などです。次に、「DumpCount」、「DumpType」、および「DumpFolder」キー/値を作成します。ユーザーがレジストリスクリプトを実行させてください。これにより、ダンプをローカルに閉じ込めます。その後、ユーザーがダンプファイルを収集するためにクラッシュを強制してください。その後、ユーザは、以前に作成した記号を使用してデバッグするためにダンプファイルを送信することができます。最後に、レジストリに追加したキー/値を削除するレジストリスクリプトを作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top