首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi - FastMM事件日志方法名称

Delphi - FastMM事件日志方法名称
EN

Stack Overflow用户
提问于 2016-08-30 14:09:34
回答 1查看 251关注 0票数 1

我正在寻找一些内存泄漏,并在FullDebugMode中使用FullDebugMode来获取事件日志。这是很好的工作,但堆栈跟踪is...not非常好。

一个简短的例子:

代码语言:javascript
复制
This block was allocated by thread 0x25F8, and the stack trace (return addresses) at the time was:
4081E8 [FastMM4.pas][FastMM4][_ZN7Fastmm411DebugGetMemEx][8737]
4086A5 [FastMM4.pas][FastMM4][_ZN7Fastmm413DebugAllocMemEx][9019]
F0D820 [_ZN6System8AllocMemEx]
F18A0D [_ZN6System8TMonitor6CreateEv]
F18EEB [_ZN6System8TMonitor10GetMonitorEPNS_7TObjectE]
10AE265 [_ZN6System7Classes16CheckSynchronizeEi]
54CAC7 [Vcl.Forms.pas][Vcl.Forms][_ZN3Vcl5Forms12TApplication4IdleERK6tagMSG][11044]
54B598 [Vcl.Forms.pas][Vcl.Forms][_ZN3Vcl5Forms12TApplication13HandleMessageEv][10473]
54BA24 [Vcl.Forms.pas][Vcl.Forms][_ZN3Vcl5Forms12TApplication3RunEv][10611]
566719 [ServerRunner.pas][ServerRunner][_ZN12Serverrunner9RunServerEv][113]

这对我来说不容易读懂。我喜欢这个单位的名字是正方形的,但是方法名称发生了什么变化呢?我知道方法的参数类型有完全限定的名称。但是,注入其中的混乱(比如_ZN3,5,12,3,Ev)是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 21:13:07

_ZN3,5,12,3,Ev 这叫做名称残缺

因为可以用相同的名称重载2个函数(如果使用不同的参数),所以编译器需要某种方法来区分它们。

这样做的方法是以特定于供应商的方式对参数进行编码并将这些代码添加到方法名称中。

参见关于SO:Delphi -BPL中的名字的问题

Delphi附带了一个名为tdump64.exe的实用程序,它可以为您解码损坏的名称。

甚至有人为此写了一个红宝石

代码语言:javascript
复制
tdump -e <name_of_exe>   

将完成这一任务,并显示所有未损坏的名字。

以下是更多的阅读:mangling.pdf

如果你愿意投资,那么MadExcept会帮你理清名字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39229813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档