如何从Window CE中崩溃给出的地址中找到源代码位置

时间:2009-09-04 09:29:02

标签: windows-mobile mfc evc4

我有一个Windows Mobile 4.0应用程序,使用带有MFC的EVC ++ 4.0 SP4编写,在该领域偶尔会出现随机崩溃。例如异常ox800000002在00112584.它不会在各种仿真器和模拟器下发生,因此使用调试器很难跟踪。崩溃引发了地址和异常类型。鉴于我有PDB,有任何方法可以跟踪此地址到源。我无法使用VC ++ 8重新编译,因为它不支持移动4 SDK。

我的猜测是,如果没有堆栈跟踪,我不会有太多的快乐,因为异常可能不在我的源代码中。值得一试。

编辑根据建议,我查看了该程序的.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和崩溃报告未分段地址意味着我必须进行一些计算才能从崩溃地址中获取地图地址?

1 个答案:

答案 0 :(得分:0)

我最近得到的是在Visual Studio 8上重新编译Windows Mobile 6,并在调试器下运行。这确实遇到了一次这样的崩溃,但并不理想。