额外的“$ qqrv”出现在符号中

时间:2013-12-13 15:17:15

标签: delphi delphi-xe3 fastmm

Delphi 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

但是,当应用程序为Release编译时,只有 。当我为Debug编译时,堆栈跟踪是“干净的”。因为我在FastMM和JCL报告中看到了同样的“垃圾”,所以我认为这不是图书馆的麻烦。

而且我用引号说“垃圾”,因为$ qqv似乎是常量而其余的字符串因运行而异。

我已检查(并重新检查)地图文件和符号设置以及JCL符号,但我在设置中看不到任何不同之处。

编辑: 毫不奇怪,潜在的原因是相同的,因为FastMM(我认为)使用JCLDebug生成堆栈跟踪...所以修复一个,修复所有。

3 个答案:

答案 0 :(得分:1)

这是JCL .map文件解析器中的一个错误。

http://sourceforge.net/p/fastmm/discussion/443400/thread/82b024dc/

详细线程和建议修复。

答案 1 :(得分:0)

可能你的Release配置不包括堆栈帧编译器选项(默认情况下,它没有)。如果没有将此信息编译到可执行文件中,堆栈跟踪显示的是运行时包导出的名称。解决方案是在调试模式下编译,或者在Release配置的编译器选项中打开堆栈帧。

答案 2 :(得分:0)

在调查之后我得出结论,这是 no 问题,只是我的误解,也许是一些陈旧的代码:

$ qqrv和其他文本都是有效且可能有用的信息,因此不是找到删除它的方法,最好学习如何使用它。上述问题中的链接为这项工作提供了良好的基础。