0

我有一个 Windows mobile 4.0 应用程序,使用带有 MFC 的 EVC++ 4.0 SP4 编写,该应用程序在现场表现出随机偶尔崩溃。例如 00112584 处的异常 ox800000002。它不会在各种仿真器和模拟器下发生,因此很难使用调试器进行跟踪。崩溃抛出和地址和异常类型。鉴于我有 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 和崩溃报告未分段地址)这一事实是否意味着我必须执行一些计算才能从崩溃地址获取映射地址?

4

1 回答 1

0

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

于 2010-05-14T06:01:43.743 回答