lonkiss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-15
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1452回复:8

200分解决Debug问题

楼主#
更多 发布于:2002-12-12 08:28
我的软件是用VC6.0写的,编译成Release版以后运行在NT4.0+SP6的机器上.但是它运行后短时间(30天)是稳定的,时间一长(2个月)就最后出来一个访问冲突的错误,然后NT4的Dr.Waston就跑出来报告说:\"XXXX.EXE 意外错误:访问冲突(0xc0000005),地址:0x00405239\"然后让用户选择关闭还是取消.这里的XXXX.EXE就是我写的软件了.
问题是这个错误差不多每40天才出现一次,软件是运行在某个工厂服务器上的,而每次发生错误的时候我都无法到现场去,我在办公室也无法使这个错误重现,所以只能根据用户给的信息来debug了.而每次得到的错误信息都是上面同样的信息.且引起错误代码地址必定是0x00405239.

我的问题是如何根据系统提供的这个0x00405239地址确定我的程序中哪行源代码出了问题?
200分一定给,决不失言.

 

[编辑 -  12/12/02 by  lonkiss]

[编辑 -  12/12/02 by  lonkiss]

最新喜欢:

chinabirdchinab...
我的真名就叫-龙旗
guard2002
驱动中牛
驱动中牛
  • 注册日期2002-05-21
  • 最后登录2017-03-07
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望65点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-12-12 08:57
我觉得可能是变量在长时间的使用过程中越界了,你先看看那些数组会出现这种情况,我以前也出现过这种情况
lonkiss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-15
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-12 09:19
当然我也知道有这些可能
而且可能的情况还有指针指向越界,内存泄漏等原因
但是软件比较大,数据结构也比较复杂,比如用了很多数组,很多指针,链表,MFC的collect中的类等,而且还是多线程的软件,一般运行时至少有15个线程在工作,这么多可能出错的地方,怎么找啊
我的真名就叫-龙旗
lonkiss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-15
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-12 09:33
呵呵,问题找到了.
原来编译的时候可以生成一个map文件,通过这个map文件可以定位每个函数在内存中的地址.
好了,现在我已经确定了是哪个函数发生了问题了,这下就好找了
我的真名就叫-龙旗
guard2002
驱动中牛
驱动中牛
  • 注册日期2002-05-21
  • 最后登录2017-03-07
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望65点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-12-12 10:28
怎么能生成map文件,能否提示一下
没用过
lonkiss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-15
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-12 10:52
VC6.0的project->setting->link->generate mapfile
生成的map文件可以用记事本直接打开查看.
我的真名就叫-龙旗
mingfa
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2008-11-03
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-16 00:27
lonkiss自己解决了问题, 不错

map 对release的Crash的Debug很重要
用VC的都应该学一下.
请朋友们参考Microsoft MSDN John Robbins 的文章

http://www.microsoft.com/msj/defaultframe.asp?page=/msj/1099/bugslayer/bugslayer1099.htm&nav=/msj/1099/newnav.htm

并search \"bugslayer\", 你debug的工夫会大增



Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-12-16 08:37
一般来说把程序的出错地址减去0x400000就是错误代码在你的程序文件中的偏移地址。在没有MAP文件时可以用这个方法
易水
lonkiss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-15
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-16 09:26
mingfa提供的信息很价值啊
给200分!
我的真名就叫-龙旗
游客

返回顶部