如何调试delphi的Access violation at address错误

1.什么是 MAP 文件?
简单地讲,MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。

2.DELPHI下生成MAP文件的方法: 偶只知道下面两种,如果谁知道其他的方法,敬请告知,多谢! 
生成详细的MAP信息的方法: 
1). project -> options -> Linker -> Map file 选择detailed. 
2). D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>dcc32 -GD project1.dpr

3.示例
我们的代码为:

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地址错误....我们这里就是要让它崩溃,让我让你崩溃 ^_^ 
然后执行,点击,然后出错,我的机器上,崩溃地址为 00 44 d9 46。

如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算: 
崩溃行偏移 = 崩溃地址(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

38 0001:0004C946 就是它了。。。unit1.pas的第38行!!去代码里看一下,果然就是38行 ^_^.....

4.补充
如果由地址查不到代码行,则将 
Project -> Options -> Compiler 中的 Debugging 的 Use Debug DCUs 勾选上后编译,
则将调用的系统文件均编译到执行文件中,同时记录在Map文件中.
这时在查找地址,不信找不到;

时间: 2024-08-02 14:49:27

如何调试delphi的Access violation at address错误的相关文章

Delphi 在写Ini文件时报错,Access violation at address 774D6EC8 in module &#39;ntdll.dll&#39; write of address 004044CD

检查代码发现读写Ini文件函数ReadString参数错误导致:如下 节点不能为空. Delphi 在写Ini文件时报错,Access violation at address 774D6EC8 in module 'ntdll.dll' write of address 004044CD

当应用出现 access violation at address in module时

Delphi2010和XE10,midas是不同的版本,之前开发的两个系统,基于不同的Delphi版本,经常出现access violation at address in module错误.特别是当midas用的是低版本时,用XE10进行datasnap进行连接时会出现该错误,刚开始不知道为什么,搞了老半天,现在清楚了,以后要注意哦!!!

AD09 &quot;Access violation at address 0C241A06 in module &#39;IntegratedLibrary.DLL&quot; 错误解决办法

regedit-将HKEY_CURRENT_USER\Software\AltiumDesignerWinter09\DesignExplorer\Preferences\IntegratedLibrary\Loaded Libraries下面的所有内容删除,重新打开altium designer添加库即可. AD09 "Access violation at address 0C241A06 in module 'IntegratedLibrary.DLL" 错误解决办法

Access violation at address 004B6031 in module &#39;navicat.exe&#39;. Read of address 00000004

1.错误描述 2.错误原因 3.解决办法 版权声明:本文为博主原创文章,未经博主允许不得转载. Access violation at address 004B6031 in module 'navicat.exe'. Read of address 00000004

“access violation at address xxxxxxxxx”错误

        在进行磁盘整理的时候,打开Foxmail的时候出现了"access violation at address32383137"错误 和"access violation at address00000000"错误.在查资料的时候遇到很多Access Violation(非法访问)的错误,那这里就统称为"access violation at address xxxxxxxxx"错误. 如图所示:   1,原理          这

解决 “access violation at address xxxxxxxxx”错误

在进行磁盘整理的时候,打开Foxmail的时候出现了"access violation at address32383137"错误 和"access violation at address00000000"错误.在查资料的时候遇到很多Access Violation(非法访问)的错误,那这里就统称为"access violation at address xxxxxxxxx"错误. 如图所示: 1,原理         这个问题是关于Acces

Delphi 通过Access Violation地址错误找到错误的哪行代码

什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方.任何时候使用,不需要有额外的程序进行支持.而且,这是唯一能找出程序崩溃的地方的救星. DELPHI下生成MAP文件的方法:生成详细的MAP信息的方法(二选一) 1. project -> options -> Linker -> Map file 选择detailed. 2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>d

access violation at address General protection fault

https://en.wikipedia.org/wiki/General_protection_fault In memory errors, the faulting program accesses memory that it should not access. Examples include: Attempting to write to a read-only portion of memory Attempting to execute bytes in memory whic

Delphi Access Violation错误的分析

转自:http://www.cnblogs.com/delphi7456/archive/2010/11/13/1876180.htmlDelphi Access Violation错误的分析 Delphi常见的运行期Access Violation错误有哪些?如何防止? 任何软件开发都会遇到这样的情况:你写好程序并测试,然后到处发送,结果用户告诉你它失败了. 你可能考虑用编译指令{$D}编译你的程序——Delphi可以建立一个有助于定位Access Violation错误的源代码的镜像文件.工