如何根据弹出错误框中的错误地址找到对应原代码哪行? 如题. 这个错误地址和.map文件中的地址对应不起来啊, - $400100后也不对. 具体是个什么对应关系呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看这个吧,可以的,我试过,不过有点麻烦。你不如先确定是那个函数除了问题,然后单步执行,这样比较方便。//********************************************************************************以前看了 通过崩溃地址找错误行数之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 想必大家看到了 会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃 ^_^ 然后执行 点击 然后出错 我的机器上 崩溃地址为0044d946 如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算: 崩溃行偏移= 崩溃地址(Crash Address)-基地址(ImageBase Address)-0x1000 减去后得到0004c946然后查找0004c946 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 //************************************************************************************* exe中代码直接出错可以找到了, 不过如果是调用某个dll出错的话还是无法定位到具体哪行调用造成的. 谁知道在这种情况下如何获取整个的函数调用链? 难道只有用汇编从当前堆栈[EBP-8]获取上一级返回地址并通过[EBP-4]不断遍历下去? 如果是这样的话那么怎么判断已经达到最顶层了?PS: 单步调试并不是万能的. 很多情况下是无法通过单步调试找出错误的, 最简单的情况就是你无法用单步来调试牵涉屏幕重绘的代码. 只要你进入单步, 你能抓到的永远是断点那句而根本跟踪不到断点后面一句, 因为断点时切换回delphi了, 一出断点又造成窗口重绘又会再次断点进delphi--而且就是刚才那个断点.另外开发多线程或定时器敏感的程序也多半无法用单步, 这时只有通过输出log来检查代码运行情况, 而log到的exception我希望能够直接定位到具体出错行, 至少也要能很方便地找到出错行. 大家用的Delphi的版本是多少? DBGrid 多表更新问题 混合查询得到的数据集 Params.WndParent:=GetDesktopWindow 似乎还是有缺陷 请问如何使pagecontrol 不显示 tabstree 呀? 送分啦!!~~~~~请问DBGridEh中如何控制光标的Tab顺序?? 时间日期型是怎么比较大小的? http://www.17delphi.org 简单问题,各位给看看,谢谢 构造函数的迷惑 idFTP如何上传整个目录? 对你绝对有帮助 调用别人EXE文件的问题???
你不如先确定是那个函数除了问题,然后单步执行,这样比较方便。
//********************************************************************************
以前看了 通过崩溃地址找错误行数之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
想必大家看到了 会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃 ^_^
然后执行 点击 然后出错 我的机器上 崩溃地址为0044d946
如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算:
崩溃行偏移= 崩溃地址(Crash Address)-基地址(ImageBase Address)-0x1000
减去后得到0004c946然后查找0004c946
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
//*************************************************************************************
单步调试并不是万能的. 很多情况下是无法通过单步调试找出错误的, 最简单的情况就是你无法用单步来调试牵涉屏幕重绘的代码. 只要你进入单步, 你能抓到的永远是断点那句而根本跟踪不到断点后面一句, 因为断点时切换回delphi了, 一出断点又造成窗口重绘又会再次断点进delphi--而且就是刚才那个断点.另外开发多线程或定时器敏感的程序也多半无法用单步, 这时只有通过输出log来检查代码运行情况, 而log到的exception我希望能够直接定位到具体出错行, 至少也要能很方便地找到出错行.