阅读:1452回复:8
200分解决Debug问题
我的软件是用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] |
|
最新喜欢:chinab...
|
沙发#
发布于:2002-12-12 08:57
我觉得可能是变量在长时间的使用过程中越界了,你先看看那些数组会出现这种情况,我以前也出现过这种情况
|
|
板凳#
发布于:2002-12-12 09:19
当然我也知道有这些可能
而且可能的情况还有指针指向越界,内存泄漏等原因 但是软件比较大,数据结构也比较复杂,比如用了很多数组,很多指针,链表,MFC的collect中的类等,而且还是多线程的软件,一般运行时至少有15个线程在工作,这么多可能出错的地方,怎么找啊 |
|
|
地板#
发布于:2002-12-12 09:33
呵呵,问题找到了.
原来编译的时候可以生成一个map文件,通过这个map文件可以定位每个函数在内存中的地址. 好了,现在我已经确定了是哪个函数发生了问题了,这下就好找了 |
|
|
地下室#
发布于:2002-12-12 10:28
怎么能生成map文件,能否提示一下
没用过 |
|
5楼#
发布于:2002-12-12 10:52
VC6.0的project->setting->link->generate mapfile
生成的map文件可以用记事本直接打开查看. |
|
|
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的工夫会大增 |
|
7楼#
发布于:2002-12-16 08:37
一般来说把程序的出错地址减去0x400000就是错误代码在你的程序文件中的偏移地址。在没有MAP文件时可以用这个方法
|
|
|
8楼#
发布于:2002-12-16 09:26
mingfa提供的信息很价值啊
给200分! |
|
|