【发布时间】:2013-12-13 15:17:14
【问题描述】:
德尔福 XE3。我正在使用 JCL 错误对话框和 FastMM,在我的应用程序中打开了 FullDebug,并在堆栈跟踪(JCL 和 FastMM)中的符号上附加了“垃圾”:
[74EA3D67] RaiseException
[0041815D] FastMM4.TFreedObject.VirtualMethodError$qqrv
[0054FEC5] Vcl.Controls.TWinControl.CMInvalidate$qqrr24Winapi.Messages.TMessage
当我想要的是:
[74EA3D67] RaiseException
[0041815D] FastMM4.TFreedObject.VirtualMethodError
[0054FEC5] Vcl.Controls.TWinControl.CMInvalidate
[00548735] Vcl.Controls.TControl.WndProc
但仅当应用程序被编译为发布时。当我为调试编译时,堆栈跟踪是“干净的”。由于我在 FastMM 和 JCL 报告中看到了相同类型的“垃圾”,我认为这两个库都不会造成麻烦。
我说的是带引号的“垃圾”,因为 $qqv 似乎是恒定的,并且字符串的其余部分因运行而异。
我已检查(并重新检查)地图文件和符号设置以及 JCL 符号,但我在设置中看不到任何不同之处。
编辑: 毫不奇怪,根本原因是相同的,因为 FastMM(我认为)使用 JCLDebug 来生成堆栈跟踪......所以修复一个,修复所有。
【问题讨论】:
-
Nothing is wrong 这个
$qqrvmangling 的意思仍然是一个问题。 -
我找到了解释 Delphi 中的 mangling 的文章(翻译自德语)。例如
qqr表示register调用约定-translate.google.com/… -
“错误”是堆栈跟踪的可读性低于它可能/应该的可读性,正如你所说,这似乎是故意的名称修改。感谢页面链接。
标签: delphi delphi-xe3 fastmm