Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
程序运行时出错,如果是以下两种情况之一,我通常都能解决:
一,能够定位出错的大概位置。
二,错误能够被重现。
但,如果出错几率极低,不知道怎么重现,那我就没辙了。前段时间我的程序就遇到这么个问题:

RaiseException: Thread=85e6b8fc Proc=803dbc00 'SetupDemo.exe'
AKY=00000401 PC=03fad178(coredll.dll+0x00063178) RA=80009e54(NK.EXE+0x00008e54) BVA=00000000 FSR=00000000

从出错提示上看,是(coredll.dll+0x00063178)这个位置的问题,但coredll.dll根本没有代码,也不知道我的程序是从什么地方进入到这个出错的地方的,更糟糕的是——我没法重现这个错误,它出现概率很低,我完全不知道什么时候它会蹦出来。

今天运气比较好,我居然找到出错地方了,根本不是什么coredll.dll的代码有问题,说了你都觉得好笑,这是一个典型的除零错误,只不过出现概率很低。后来我另写了一个程序,故意执行了一个除零错误,结果也是出现类似的错误提示:

RaiseException: Thread=96d18a40 Proc=80096b80 'ZeroDivisor.exe'
AKY=00000401 PC=03fb09f8(coredll.dll+0x000629f8) RA=88037538(NK.EXE+0x00007538) BVA=00000000 FSR=00000000

我就纳闷着为什么调试器不会停在出错的地方,以便我发现这个错误呢?

经验经验,有时候我觉得我们开发者像艺术家,有时候我却觉得像侦探……
posted on 2010-07-14 13:51 Jiang Guogang 阅读(330) 评论(1)  编辑 收藏 引用 所属分类: Windows Embedded Programming

评论

# re: core error unable to track? 2010-07-14 18:49 Matthew
我现在都不会设断点了,直接print来定位错误大概位置  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理