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生成堆栈跟踪...所以修复一个,修复所有。
答案 0 :(得分:1)
这是JCL .map文件解析器中的一个错误。
见 http://sourceforge.net/p/fastmm/discussion/443400/thread/82b024dc/
详细线程和建议修复。
答案 1 :(得分:0)
可能你的Release配置不包括堆栈帧编译器选项(默认情况下,它没有)。如果没有将此信息编译到可执行文件中,堆栈跟踪显示的是运行时包导出的名称。解决方案是在调试模式下编译,或者在Release配置的编译器选项中打开堆栈帧。
答案 2 :(得分:0)
在调查之后我得出结论,这是 no 问题,只是我的误解,也许是一些陈旧的代码:
$ qqrv和其他文本都是有效且可能有用的信息,因此不是找到删除它的方法,最好学习如何使用它。上述问题中的链接为这项工作提供了良好的基础。