无聊的时候翻了一下收藏夹,看到了“通过崩溃地址找错误行数之Delphi版”,但地址已经失效了。通过Google找了一下,原来是CSDN的beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)发在论坛中的。
整理一下,放在这里备份。
原地址:http://topic.csdn.net/t/20041130/12/3601416.htm


以前看了"通过崩溃地址找错误行数之VC版"那时候还没用DELPHI,昨晚刚好又看到了,所以就试了一下DELPHI的,与大家共享。^_^
什么是MAP文件?简单地讲,MAP文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。而且,这是唯一能找出程序崩溃的地方的救星。
DELPHI下生成MAP文件的方法:偶只知道下面两种,如果谁知道其他的方法,敬请告知,多谢!
生成详细的MAP信息的方法:

  1. project -> options -> linker -> Map file 选择detailed.
  2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>dcc32 -GD project1.dpr

我们的代码为:

unit Unit1;

//{$D+,L+}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    {  Private  declarations  }
  public
    {  Public  declarations  }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  I, J: Integer;
  p: PChar;
begin
  I := 10;
  J := 0;
  //I := I div J;  //  32
  //ShowMessage(IntToStr(I));
  p := nil;
  p^ := 'A';  //  38
end;

end.

想必大家看到了,会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃!!^_^
然后执行 -> 点击 -> 然后出错 -> 我的机器上 -> 崩溃地址为0044d946
如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算:

  • 崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000

0044d946 - 00400000 = 0004d946 - 00001000 = 0004c946
0004C946 就是它了,我们用UltraEdit32之类的工具打开.map文件,搜索"0004C94",找到了,然后就找0004c946的那个地址,然后看到了:

Line   numbers   for   Unit1(Unit1.pas)   segment   .text  
   
          37   0001:0004C944         38   0001:0004C946         39   0001:0004C949         41   0001:0004C97C  
          41   0001:0004C983  
  

O Yeah..<星际里面注射兴奋剂的声音 ^_^>..
"38   0001:0004C946"就是它了!!unit1.pas的第38行!!去代码里看一下,果然就是38行。^_^.....
共享ing...如果有不妥之处,敬请之处!多谢....

转载于:https://www.cnblogs.com/jambol/archive/2008/04/24/1169841.html

[转]通过崩溃地址找错误行数之Delphi版相关推荐

  1. 通过崩溃地址找错误行数之Delphi版

    通过崩溃地址找错误行数之Delphi版 2009-5-11 17:42:35 来源: 转载 作者:网络 访问:360 次 被顶:2 次 字号:[大 中 小] 核心提示:什么是 MAP 文件?简单地讲, ...

  2. 仅通过崩溃地址找出源代码的出错行

    仅通过崩溃地址找出源代码的出错行 作者:老罗 http://www.vckbase.com/document/viewdoc/?id=908 提交者:eastvc 发布日期:2003-10-23 9: ...

  3. MAP文件和调试(VC)(从崩溃地址找出错源码位置)

    也是:一直听说,从未动手. 所以,用VC生成一下MAP文件,帮助调试. 一.步骤: Project Settings-> C/C++-> Project Options: 这里输入 /Zd ...

  4. linux addr2line,定位so文件崩溃代码行数

    当我们使用别人的ndk时,可能别人的so文件会崩溃,这个时候需要定位该so文件崩溃的代码的行数,即哪一行.方法如下: 1.找到ndk下面的该目录:D:\IT\AndroidStudio\SDK\ndk ...

  5. 【VBA研究】用VBA取得EXCEL任意列有效行数

    作者:iamlaosong 用VBA对Excel文件进行处理的时候,关键字段的列号编程时往往是不知道的,需要通过参数设定才能知道,因此,我们编程的时候,就不能用这样的语句取有效行数: lineno = ...

  6. cxgrid限定行数

    cxGrid1BandedTableView 是可以控制行数的,只有cxGrid1DBTableView 是通过数据集控制的. 通过如下代码设置行数: Delphi/Pascal code? cx.d ...

  7. Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...

    关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089    在开发中,我们常常用打印log的方 ...

  8. 使用COUNT(*)统计指定表行数时报错:将 expression 转换为数据类型 int 时出现算术溢出错误

    报错信息: [22003] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]将 expression 转换为数据类型 int 时出现算术溢出 ...

  9. 从libc-2.27.so[7fd68b298000+1e7000]崩溃回溯程序段错误segfault

    近期在外场试验过程中出现了一次进程退出的问题(在西安地面测试中也出现过一次),但是因为该问题不复现,后面就一直记着但没有进行闭环,也不清楚是异常退出还是因为资源消耗问题被系统杀死.这次回来之后有必要进 ...

  10. 从libc-2.27.so[7ff3735fd000+1e7000]崩溃回溯程序段错误segfault

    简介 最近的应用程序遇到了点问题,它总是在退出的时候段错误崩溃. 段错误大家应该不陌生了,内存使用不当导致段错误. 通过尝试gdb core文件,dmesg,objdump库文件等方法终于定位到了崩溃 ...

最新文章

  1. ThinkPHP导入第三方类库Vendor
  2. oracle sqlplus 常用命令大全
  3. footer固定到底部
  4. Oracle的一点注意点
  5. 企业级业务系统开发实战-序言
  6. matlab入门之旅,MATLAB 入门之旅学习笔记
  7. java中的方法求和_在Java中模拟求和类型的巧妙解决方法
  8. IDEA如何像Eclipse打开多个项目?
  9. Node.js抓取网页信息并展示(cheerio网络爬虫)
  10. 图片加载------reactVirtualized
  11. 004-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-共享服务中心建设原则...
  12. Visio 2016软件
  13. 台式计算机常用总线,计算机中常见的总线有哪些
  14. NetSetMan NetSetMan IP快速切换
  15. php的威富通支付接口,威富通支付接口 - osc_hlr8sqnv的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. 桌面提醒助手谷歌浏览器插件
  17. 关于电子科技大学学生用餐状况的一些调查
  18. Iphone 和 Ipad 开发 区别
  19. 1GB有多少个扇区?
  20. 如何使用计算机勾绘汇水面积,汇水面积怎么计算

热门文章

  1. oracle表的操作简述
  2. linux下完全删除mysql
  3. 层次选择器[selector_2.html]
  4. 关于ibatis中sqlMap配置文件中使用到,的处理
  5. 基于java的网络抓包方法
  6. ATT与intel汇编格式区分
  7. url去重:布隆过滤器-python实现
  8. 第四季-专题1-课程规划与学习方法
  9. 凸优化第七章统计估计 作业题
  10. Java多线程-新特征-锁(下)