EVC++ 4.0 SP4 と MFC を使用して記述された Windows モバイル 4.0 アプリケーションがありますが、フィールドで時折ランダムにクラッシュします。例: Exception ox800000002 at 00112584. さまざまなエミュレーターやシミュレーターでは発生しないため、デバッガーを使用してトレースすることは非常に困難です。クラッシュが発生し、アドレスと例外の種類がスローされます。私が PDB を持っていることを考えると、このアドレスをソースまで追跡する方法はあります。モバイル 4 SDK をサポートしていないため、VC++ 8 を使用して再コンパイルすることはできません。
私の推測では、例外がソースにない可能性があるため、スタック トレースがなければあまり満足できないと思います。試してみる価値はあります。
編集 示唆されているように、プログラムの .MAP ファイルのコンテキストでアドレスを調べました。これにより、次のことがわかります
Address Publics by Value Rva+Base Lib:Object
0001:00000000 ?GetUnduValue@@YANMM@Z 00011000 f 7Par.obj
'
'
'
0001:001124b8 ?OnLButtonUp@CGXGridUserDragSelectRangeImp@@UAAHPAVCGXGridCore@@AAVCPoint@@AAI@Z 001234b8 f gxseldrg.obj
0001:001126d8 ?OnSelDragStart@CGXGridUserDragSelectRangeImp@@UAAHPAVCGXGridCore@@KK@Z 001236d8 f gxseldrg.obj
これは、CGXGridUserDragSelectRangeImp::OnLButtonUp() 中にエラーが発生したことを示唆しています。これは、その時点でマウス/キーボード/画面ボタンが押されていないと思うので、少し奇妙に思えます。クラッシュが報告される前にスタックが断片化された可能性があり、時間を無駄にしています。アセンブラー出力を使用して再コンパイルして、特定の行に分離しようとしますが、あまり期待できません:(
マップ ファイルが 0001:xxxxxxxxx などのセグメント化されたアドレスをレポートし、クラッシュ レポートがセグメント化されていないアドレスをレポートするという事実は、クラッシュ アドレスからマップ アドレスを取得するために何らかの計算を実行する必要があることを意味しますか?