符号中出现的额外"$qqrv"



Delphi XE3。我在应用程序中使用JCL错误对话框和打开FullDebug的FastMM,并将"垃圾"附加到堆栈跟踪(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

仅在编译应用程序以进行发布时。当我为Debug编译时,堆栈跟踪是"干净的"。由于我在FastMM和JCL报告中看到了同样的"垃圾",我不认为这两个库都会带来麻烦。

我用引号说"垃圾"是因为$qqv似乎是恒定的,而字符串的其余部分因运行而异。

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

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

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

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

详细的线程和建议的修复。

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

仔细研究后,我得出结论,这是没有问题,只是我的误解,可能还有一些过时的代码:

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

相关内容

  • 没有找到相关文章

最新更新