【问题标题】:Extra "$qqrv" appearing in symbols符号中出现额外的“$qqrv”
【发布时间】: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 这个$qqrv mangling 的意思仍然是一个问题。
  • 我找到了解释 Delphi 中的 mangling 的文章(翻译自德语)。例如qqr 表示register 调用约定-translate.google.com/…
  • “错误”是堆栈跟踪的可读性低于它可能/应该的可读性,正如你所说,这似乎是故意的名称修改。感谢页面链接。

标签: delphi delphi-xe3 fastmm


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我只是检查了一下,我确实在 Release 中有堆栈帧(它是一个测试版,所以还有很多调试)
    • 我这里没有安装 JCL Debug,所以现在无法检查,但调试信息也打开了吗?
    【解决方案3】:

    在查看完所有内容后,我得出结论,这是没有问题,只是我的误解,也许是一些陈旧的代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2020-02-21
      • 2019-04-23
      相关资源
      最近更新 更多