CE下如何实现错误报告功能?

MS_Frank MS_Frank 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如题,我最近写了个程序(Windows Mobile上的)在模拟器上测试无任何问题,可是一拿到真机上就偶尔会出错,出错的原因是访问了未对齐的数据,我代码检查了好多遍也没发现哪错了。

我使用如下方法能捕获到这个异常
__try
{
...
}
__except(HandleException(GetExceptionInformation()))
{
...
}
得到一个LPEXCEPTION_POINTERS结构,在这个结构里面能获得异常地址(ExceptionAddress)。
其实到问题已经可以解决了;比如 :*(LPBYTE)NULL=2,这句代码产生异常被捕获到,ExceptionAddress就是首先异常的代码地址,拿着这个地址到.map文件中就可以找到产生错误的代码。
但是如果int a=0; a/=a; 这样的除0异常被捕获到后ExceptionAddress的地址不是产生异常的地址,而是跑到了coredll.dll里面去了。

我试过用CaptureDumpFileOnDevice首先dump文件,这个函数在真机上测试老失败,不用它也罢。我只是想在产生异常时得到异常的地址,使之可以在.map文件中找到产生错误的函数就行,然后我可以仔细慢慢检查那个函数就行了。如果实在得不到准确的产生错误的地址能得到异常时的函数调用堆栈也行。

求各位大哥大姐们帮帮我吧,这个问题困扰我好几天了!!!


...全文

相关推荐

评论 22
收藏 已收藏
分享
返回顶部
MS_Frank
嵌入开发(WinCE) 19,524 成员 41,565 内容