如何根据异常提示信息找出程序出错代码(VC6)

看到网上说在debug下可以找到预料的崩溃地址行,但是实际上没有什么用呀。
(既然在debug下,那直接用调试器找不更好吗? 费这么大劲干什么)(转的文章在后面)

Release
版本(指编译器优化后的),要找崩溃地址行就比较费劲了。
linux
下的方法:
1
、使之生成core dump文件
2
gdb调试该core文件
3
、根据大概的堆栈信息,运行disassemble (具体用法见gdb帮助)
4
、根据崩溃地址找到对应的崩溃反汇编码
5
、分析反汇编代码,找到程序中崩溃代码。
(如果用debug调试,就更简单了,步骤同上,编译的时候加上编译选项 -ggdb ,选项详情请见man g++

mac
下的方法:
1.
、使之可以生成core 文件,方法同linux
2
、分析对应的crash log 在系统日志目录下。
3
、根据2的堆栈信息,反汇编,得到具体地址行。

最后转2win下的文章。(这种方法好像难找release的。)
(1)  
(vs2003
以上,vc6找对应设置就可以)

步骤一:编译代码时生成map 文件和 cod 文件

我建立了一个名为DataAbort的项目,A)生成map文件,打开项目属性对话框,找到链接--调试生成映射文件栏选择 B)生成cod文件,打开项目属性对话框,找到“C/C++--输出文件汇编输出栏选择带机器码的程序集

在默认情况下map文件以项目名称命名,而cod文件以cpp文件名命名,生成目录也不同,编译后可以在项目目录下搜索*.map *.cod

步骤二:根据异常信息找到相应的map文件,及异常地址所在的函数

步骤三:打开异常函数所在的cod文件,找到异常对应的代码行。分析问题,解决问题

 

(2)仅通过崩溃地址找出源代码的出错行一文的补充与改进

读了老罗的仅通过崩溃地址找出源代码的出错行”(下称"罗文")一文后,感觉该文还是可以学到不少东西的。不过文中尚存在有些说法不妥,以及有些操作太繁琐的地方。为此,本人在学习了此文后,在多次实验实践基础上,把该文中的一些内容进行补充与改进,希望对大家调试程序,尤其是release版本的程序有帮助。欢迎各位朋友批评指正。


一、该方法适用的范围
  在windows程序中造成程序崩溃的原因很多,而文中所述的方法仅适用与:由一条语句当即引起的程序崩溃。如原文中举的除数为零的崩溃例子。而笔者在实际工作中碰到更多的情况是:指针指向一非法地址 ,然后对指针的内容进行了,读或写的操作。例如:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值