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

2023-11-02

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • XCode 4.2.1 在 Lion 10.7.2 上启动时崩溃

    这周我买了大约 10 年来的第一台 Mac 是的 这是一台二手 Mac Pro 2x2GHz 双核 Xeon 2GB RAM 它全新安装了 Mac OS X Lion 10 7 2 我只安装了 OmniOutlner Pro Textmat
  • 有什么方法可以让 C/C++ 程序在 main() 之前崩溃吗?

    有什么办法可以让程序在 main 之前崩溃吗 使用 gcc 您可以使用以下标记函数构造函数属性 http gcc gnu org onlinedocs gcc Function Attributes html index g t 0040c
  • IntelliJ IDEA 中的 Android 开发导致电脑死机

    我使用 IntelliJ IDEA 10 5 进行 Android 开发 并使用最新的 Google USB 驱动程序 版本 4 进行调试 在 IntelliJ IDEA 中开发一段时间后 当通过 USB 连接 Android 设备 Nex
  • iPhone 4G 拍照时应用程序崩溃?

    我已从我的设备中拍摄照片并调整图像大小并将其设置到我的图像视图框架 但我的应用程序在拍摄照片后有时会崩溃 使用调整大小 现在我已经用 iPhone 4G 拍了这张照片 仅当许多应用程序在后台运行 多任务 时 应用程序才会崩溃 那么我该如何解
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • 字节大小(澄清)

    我正在编写一个游戏服务器 这可能是一个简单的问题 但我只是想要一些澄清 为什么一个字节 char或unsigned char 最多可以容纳255 0xFF 我认为是2个字节 的值 当我使用sizeof unsigned char 编译器告诉
  • 在 中动态添加链接样式表 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何将链接
  • TCPDF/PHP 和字体:大写数字(血统数字?旧样式?)

    我得到了一种特殊的字体 上面有这样的数字 例如 正如您在 3 上看到的 一些数字下降到基线以下 我想要实现的是 这些数字不会低于该线 并且看起来像这样 在 Word 中 可以在相同字体的字符设置中轻松设置 如何在 TCPDF 中呈现数字 我
  • 为什么 C# 中 bool 数据类型的大小不是只有 1 位?

    我刚刚学习 C 并深入研究数据类型 为什么不是一个bool数据类型大小为 1 位 看起来它只能保存两个值之一 true 或 false 那么这不是只占用 1 位空间来表示该值吗 是因为值的最小 可寻址 大小是一个字节 8 位 吗 这个帖子
  • 如何在fortran 90中生成[0,5]范围内的整数随机数?

    我对 Fortran 编程有点陌生 任何人都可以帮我解决问题吗 我在生成整数随机数时遇到问题 在 Fortran 随机数范围 0 5 中使用 random seed 和 rand 为了支持answer https stackoverflow
  • 我们如何确定总数? Hive 表的桶数

    我对 hadoop 有点陌生 根据我的知识桶是固定的 hive 表中的分区数和 hive 使用编号 减速机数量与总数量相同创建表时定义的存储桶数量 那么谁能告诉我如何计算总数 Hive 表中的桶数 有没有计算桶总数的公式 让我们看一个场景
  • 如何将 byte[] 转换为 Byte[] 以及相反?

    如何转换byte to Byte 并且Byte to byte 在不使用任何第三方库的情况下 有没有一种方法可以仅使用标准库快速完成 字节 到字节 byte bytes Byte byteObject ArrayUtils toObject
  • pyQt5 中退出时出现分段错误,但 pyQt4 中没有

    退出时崩溃的解决方法如下这个答案 https stackoverflow com a 18416818 3565696在 pyqt4 中工作 但不使用 pyqt5 其中经常 超过一半的时间 出现分段错误 仅导入行发生变化 usr bin p
  • 如何制作抗崩溃的ios应用程序

    我现在正在编写 ios 应用程序一段时间 但我的应用程序仍然经常崩溃 并且需要时间才能使它们变得非常稳定 我觉得这很烦人 那么 有没有关于防崩溃编程ios应用程序的编程模式呢 打开编译器警告 删除所有警告 运行静态分析器 删除所有警告 使用
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 屏幕方向更改后应用程序崩溃

    我有以下问题 启动后 应用程序工作正常 即使在更改屏幕方向后也是如此 应用程序尚未准备好处理方向更改 例如替代布局等 因此仅显示旋转的默认布局就可以了 但是 当我通过按后退键离开应用程序 更改方向并在再次启动应用程序后立即崩溃 崩溃后 如果
  • 当字符串的长度大于n时,如何打印字符串的前n个字节?

    所以我有一个具有一定字节数 或长度 的字符串 我说字节是因为字符串末尾没有 NULL 终止符 不过 我知道绳子有多长 通常 众所周知 当您printf s str 它将继续打印每个字节 直到到达 NULL 字符 我知道没有 C 字符串不是
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支
  • MVC 音频控制从字节播放歌曲

    我将歌曲作为 bytes 存储在数据库中 我如何在
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发

随机推荐