2011-08-10 12 views
1

問題のあるコードを調べています。アプリケーション検証は、ヒープは、以下の呼び出し後に破損している示していますme.Pleaseとマップファイルを使用したクラッシュの場所の特定

AA!Class::Function+dbaf 

私が持っているマップファイルには、どのような情報と地図ファイルに存在する情報の上に使用して行数に到達するために私を助けて。

優先ロードアドレスは00400000

0002:00000dc4  [email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@[email protected]@Z 0049bdc4 

。注:私は、クラスや関数名を匿名化しています。

+0

これは12行目です(答えに匿名の番号があります)。 –

+0

@Kerrek、:)私はあなたの答えが好きです。私の会社はこれを好まないかもしれないので匿名化しました。あなたがこれを理解してくれることを願っています。ありがとうございます – Satbir

+0

@Sabir:確かに、冗談を赦してください...実際の問題は、コードの一部を投稿せずにクラッシュが発生した場所を知るためにデバッグを自分で行うのであれば、何か有用なことを言うのがほぼ不可能だということです。デバッグシンボルを最初にコンパイルすると、デバッガはどこに行くのかをすでに伝えることができます。 –

答えて

1

マップファイルはありますか? PDBはありませんか?完全なシンボルがある場合は、WinDBGでマップと.pdbs(および.exe)を使用します(Windows上にいますか?)。 私は、あなたがどのように関数の名前が与えられているかを見ていると思います。

IF not ... dbafはあなたの答えです。それはどういう意味ですか?オフセットは、誤った命令の場所でなければなりません。 もちろん、それぞれの命令(アセンブリ命令)の数を把握する必要があります。

+0

彼はpdbを持っています、そうでなければAA!Class :: Functionを表示できませんでした。それは非常に良いものではありませんが、0xdbafはかなり大きなオフセットです。彼の地図はおそらくあまりにもひどいです。 –

+0

AA!Class :: Function + dbafは、ヒープ破損を報告するアプリケーションベリファイアの結果ファイルにあります。ご回答有難うございます。シンボルファイルを使ってデバッガで試してみます。 – Satbir

0

マップファイルとEIP(命令ポインタ、コードがクラッシュしたアドレス)の値だけを持つことで、問題のあるコードにジャンプすることができることを覚えています。速いgoogle検索でこのウェブページ:Map Files And DLL Rebasingを指摘しました。理想的な状況で覚えていることから、Visual C++デバッガで直接EIPの値を変更することができ、対応するコード行にジャンプします。

これはVisual C++ 6の時代であり、今でもまだ適用可能かどうかはまだ分かりません。すでに指摘したように、Visual C++では記号やプログラムデータベースのオプションを実際に調べる必要があります。セットアップと使用方法に関する情報がたくさんあります。

関連する問題