如何根据异常提示信息找出程序出错代码(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) 的相关文章

  • Chrome 操作系统模拟器在启动时崩溃

    我尝试在 Android studio 中的 Chrome OS 模拟器上调试我的 Android 应用程序 这是我遵循的教程 https developer android com topic arc emulator https dev
  • 修复核心数据失败

    我的应用程序商店中有一个使用 Core Data 的应用程序 我必须在明天之前发布更新 但是 我在使用 Core Data 时遇到了一些问题 我错误地更改了 Core Data 中的模型 现在我的应用程序崩溃了 我尝试迁移数据 但当我在 i
  • 如何将字节数组转换为任何类型

    好的 我看到有人问如何将字节数组转换为int string Stream等等 答案各不相同 我个人还没有找到任何令人满意的答案 这里有一些我们想要将字节数组转换成的类型 UnityEngine Font可以吸收ttf data UnityE
  • Xamarin.Android 应用程序仅在干净编译时找到启动器活动

    我有一个Xamarin Android标记为 MainLauncher 的活动称为 Login 当我第一次按 F5 时 应用程序在模拟器中正常启动 然后我停下来 进行一些代码更改 再次按 F5 我可以看到应用程序在模拟器中启动 当我收到以下
  • Jquery:获取数字数组中的最大值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 使用jquery 如何获得数组或数字
  • 如何去掉 LATEX 报告文档类中节编号中的零?

    所以我正在使用 Latex 编写报告 我使用的文档类是报告 documentclass a4paper 报告 但由于某种原因 节编号的编写方式是在其前面加上 0 例如 它看起来像 0 1 Introduction 0 2 Theory 0
  • 添加一个新列,其中标签附加到新月形数字

    我想添加一个新列 给出一个常量标签 并逐行附加新月数字逻辑 我的输入 position work chr1 jil2001 chr4 jil2001 chr3 kou2009 chr9 nai2012 chr7 fandis2005 我的预
  • c++ - 将“std::vector”的内容保存到文件

    我使用 writeFileBytes 下面的函数来写入a的内容std vector
  • 将 Pi 转换为字母?

    对于 Pi Day 我正在尝试编写一个 Java 程序 尝试在 Pi 中找到给定的单词 或另一个给定的无理数 我几乎已经完成了所有工作 但我对如何将 pi 的每个数字转换为字母感到矛盾 我想说 A 01 B 02 C 03 Y 25 Z 2
  • DeadSystemException启动服务Android 7

    在过去的几周里 我在我的事故报告中看到 Fatal Exception java lang RuntimeException Unable to start service com MyService ef705d8 with Intent
  • scanf导致C程序崩溃

    这个简单的问题导致我的整个程序在第一次输入期间崩溃 如果我删除输入 程序可以正常工作 但是一旦我将 scanf 添加到代码中并输入输入 程序就会崩溃 include
  • JavaScript 数字在内存中的大小都相同吗?

    我正在阅读本书的面向 Web 开发人员的专业 JavaScript 似乎所有 ECMAScript 数字都是 binary64 浮点数 这得到了证实这篇 MDN 文章 https developer mozilla org en US do
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • 将文本字段限制为仅包含数字的最佳方法?

    I m using the following Javascript to restrict a text field on my website to only accept numerical input and no other le
  • Javascript:生成具有固定平均值和标准差的随机数

    我的问题 如何在 Javascript 中创建具有给定平均值和标准差 sd 的随机数列表 Example 我想创建一个包含 5 个范围在 1 到 10 之间的随机数的列表 生成的平均值应为 5 标准差应为 2 到目前为止我所做的 我的想法是
  • 如何获取Android崩溃日志?

    我有一个不在市场上的应用程序 使用调试证书签名 但希望在我的应用程序崩溃时获取崩溃日志数据 在哪里可以找到我的应用程序崩溃原因的日志 如果您的应用程序正在被其他人下载并在远程设备上崩溃 您可能需要查看 Android 错误报告库 参考这个帖
  • 是否有任何库可以解析Java中的“数字表达式”,例如1,2-9,33-

    我不认为这很难 只是写起来很乏味 一些小的免费 如啤酒 库 我可以在其中放入像 1 2 9 33 这样的字符串 它可以告诉我给定的数字是否与该数字匹配表达 就像大多数程序的打印范围对话框一样 仅匹配奇数或偶数 或匹配每个 2 mod 5 或
  • 生成总和恒定的随机数

    我在想是否有办法生成一组随机数 其总和始终是一个常数 例如 20 可以分为 5 个数字 1 2 3 4 10 我不在乎这 5 个数字分别是什么 只要它们的总和等于 20 有没有办法以编程方式执行此操作 为了获得均匀分布 技巧是将总和视为一条
  • iPhone 4G 拍照时应用程序崩溃?

    我已从我的设备中拍摄照片并调整图像大小并将其设置到我的图像视图框架 但我的应用程序在拍摄照片后有时会崩溃 使用调整大小 现在我已经用 iPhone 4G 拍了这张照片 仅当许多应用程序在后台运行 多任务 时 应用程序才会崩溃 那么我该如何解
  • 列出 J 中数字的数字

    我使用的编程语言 J 我想将一个数字的所有数字放入一个列表中 From 12345 to 1 2 3 4 5 我能做些什么 我写这个的方式是 10 1 我们可以看到它与这句话的使用 10 1 123456789 1 2 3 4 5 6 7

随机推荐