debugging 使用运行库的 Delphi 64位调试具有错误的堆栈帧活动

wfypjpf4  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(134)

我遇到了一个Win64调试问题,看起来我们"丢失"了调试信息。所以我做了一些research,并为我们的旗舰产品重新创建了我所有的. dproj文件。这很有帮助,因为我找回了我"丢失"的蓝球。
但现在我遇到了一个新问题:栈显示窗口中显示的栈框架(顶部)看起来是错误的,这导致局部变量不显示在局部变量窗格中,当鼠标悬停在某个变量上方时也不显示。2但是当我选择我认为正确的栈框架时,局部变量窗口不再是空的。3悬停鼠标时仍然什么也不显示。
也检查链接的截图,这应该澄清了很多事情。

    • 相关编译器选项**
  • 调试信息:调试信息
  • 本地符号:真的
  • 堆叠帧:真的
  • 符号参考信息:参考信息
  • 使用调试dcus:假
  • 使用导入的数据参照:真的
  • 链接器调试信息:真的
  • 包括远程调试符号:假
    • 版本信息:**
  • RAD工作室企业版10.2.3东京,构建版本25.0.29899.2631
  • 安装了DDevExtension,安装了IDEFixPack(卸载没有区别)
  • 已安装JCLDebug(卸载无差别)

我已经尝试了许多调试设置的组合,但问题仍然存在于我的系统上。
我同事的电脑在同样的代码中也有同样的问题,所以至少它是可以重现的。当试图用一个运行时bpl的小项目重现这个问题时,问题似乎没有发生,或者我无法重现它。因此我没有源代码可以发布。
当然,这里有一个问题:

  • 其他人有过这样的经历吗?
  • 找到解决办法了?-请分享!
  • 未找到解决方案?-〉请添加评论/为此issue投票

我很想添加一些图片来澄清,但不幸的是我的声誉还不够高。所以我只能添加图片的链接,对不起。

q35jwt9p

q35jwt9p1#

事实证明,这里发生了一些完全不同的事情。丢失的局部符号似乎是由调试器没有加载所有调试信息引起的。我创建了一个单元测试,加载运行时BPL的。当我运行窗体时(检查有问题的屏幕截图)在单元测试中,stackframe和本地符号正确显示。当我在相当大的应用程序中运行表单时,那么完全相同的二进制bpl不显示本地符号和堆栈信息。奇怪的是,同一个BPL中的其他单元实际上显示了正确的堆栈和本地变量信息,例如,首先创建表单的单元直到创建表单的构造函数的地方都是可以的。
所以我猜想加载符号表时会发生一些事情。当我将调试设置更改为屏幕截图中所显示的(Load All Symbols=off,and onoy load debug info for the main bpl)时,瞧,我的堆栈和局部变量都正确显示了。在同一个二进制文件中。当我打开“load symbols for unspecified modules”时,我又回到了缺少堆栈和局部符号的旧情况。
所以我怀疑调试器能处理多少调试信息是有限制的(* 真的 *?在 * 64位模式 * 下?),我似乎记得很久以前的 Delphi 2..7调试。
当然,当这样做的时候,我缺乏所有其他单元的调试信息,所以虽然这是一个答案,但它不是最终的解决方案。我将在embarcadero网站上发布另一个question和问题。

相关问题