使用运行时库的Delphi 64位调试具有错误的堆栈帧活动 [英] Delphi 64 bit debugging using runtime libs has wrong stack frame active

查看:124
本文介绍了使用运行时库的Delphi 64位调试具有错误的堆栈帧活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了Win64调试问题,好像我们在丢失"调试信息.因此,我做了一些研究,然后重新创建了我的所有内容. dproj文件用于我们的旗舰产品.当我把丢失的"蓝色球拿回来时,这很有帮助.

I ran into a Win64 debugging problem where it looks like we are "missing" debug info. So I did some research and re-created all my .dproj files for our flagship product. This helped, as I got my "missing" blue balls back.

但是现在我遇到了一个新问题:在堆栈显示窗口中显示的(顶部)堆栈框架似乎是错误的,这导致局部变量未显示在局部变量窗格中,并且也没有在鼠标悬停时显示在一些变量之上.但是,当我选择正确的堆栈框架时,局部变量窗口不再为空.悬停鼠标仍然没有显示任何内容.

But now I run into a new problem: the (top) stack frame displayed in the stack display window appears to be wrong, which results in local variables not being displayed in the local variables pane, and also not when hovering the mouse above some variable. But when I select the stack frame wich I think is correct, the local variables window is not empty anymore. Hovering the mouse still shows nothing.

还请检查链接的屏幕截图,这应该使事情更加清楚.

Also check the linked screenshots, which should clarify things a lot more.

相关的编译器选项

  • 调试信息:调试信息
  • 本地符号:真
  • 堆栈框架:真
  • 符号参考信息:参考信息
  • 使用debug dcus:False
  • 使用导入的数据引用:True
  • 链接器调试信息:True
  • 包括远程调试符号:False

版本信息:

  • RAD Studio Enterprise 10.2.3 tokyo,内部版本25.0.29899.2631
  • 已安装DDevExtension,已安装IDEFixPack(卸载没有区别)
  • 已安装JCLDebug(卸载没有区别)

我尝试了许多调试设置组合,但是问题仍然存在于我的系统上.

I have played around with many combinations of debug settings, but the problem persists on my system.

我的大学计算机在相同的代码中存在完全相同的问题,因此至少可以放心地对其进行复制.当尝试使用运行时bpl的小项目来重现此问题时,问题似乎没有发生,或者我无法重现.因此,我没有为此发布消息的来源.

My colleages computer has exactly the same issue in the same code, so at least it is reproducable with confidence. When trying to reproduce this using a small project with runtime bpl's the problem appears not to occur, or I am unable to reproduce it. Hence I have no source to release for this.

当然,这是一个问题: -有人经历过吗? -找到了解决方案? - 请分享! -找不到解决方案? ->请对此问题

And off course here's a (are) question(s): - Has anyone else experienced this? - found a solution? - please share! - Not found a solution? -> please add comment/vote for this issue

我想添加一些图片来澄清,但是很遗憾,我的声誉还不够高.因此,我只能添加指向图片的链接,对此表示歉意.

I would love to add some pictures to clarify, but unfortunately my reputation isn't high enough yet. So I can only add links to the pictures, sorry for that.

推荐答案

事实证明,这里发生了完全不同的事情.缺少的本地符号似乎是由调试器未加载所有调试信息引起的. 我创建了一个单元测试来加载运行时BPL. 当我从单元测试中运行表单(检查有问题的屏幕截图)时,堆栈框和本地符号会正确显示 当我从相当大的应用程序中运行表单时,则完全相同的二进制bpl不会显示本地符号和堆栈信息.奇怪的是,同一BPL中的其他单元实际上确实显示了正确的堆栈和局部变量信息,例如,首先创建表单的单元在创建表单的构造函数之前都是可以的.

As it turns out there is something completely different going on here. The missing local symbols appear to be caused by the debugger not loading ALL debug information. I have created a unit test the loads the runtime BPL's. When I run my form (check screenshots in question) from within the unit test, stackframes and local symbols are displayed correctly When I run the form from within my rather large application, then exactly the same binary bpl does NOT show the local symbols and stack info. Strangely enough other units in the same BPL actually do show correct stack and local variables info, eg the unit that creates the form in the first place is OK upto where the constructor of the form is created.

因此,我猜测加载符号表时发生了某些事情.而且,当我将调试设置更改为屏幕截图中所示(加载所有SYmbols = off,并为主要bpl加载了onoy调试信息)时,请确保我的堆栈和局部变量正确显示.在相同的二进制文件中.当我打开为未指定的模块加载符号"时,我回到了缺少堆栈和本地符号的旧情况.

So I guessed there is something going on with loading the symbol table. And when I change the debug settings to as displayed in the screenshot (Load All SYmbols=off, and onoy load debug info for the main bpl), voila my stack and local variables are displayed correctly. In the same binary. When I turn ON "load symbols for unspecified modules" I get back to the old situation with the missing stack and local symbols.

所以我怀疑调试器可以处理多少调试信息(在 64bit模式下真的真的 ??)有一个限制,我似乎很早就记得Delphi 2..7调试.

So I suspect there is a limit to how much debug info the debugger can handle (really? in 64bit mode?), which I seem to remember from long ago Delphi 2..7 debugging.

当然,在这样做时,我缺少所有其他单元的调试信息,因此尽管这是一个答案,但它不是最终的解决方案.我将提出另一个

Off course, when doing so I lack the debug info for all the other units, so while it is an answer, it is NOT a final solution. I will put up another question and issue in the embarcadero site.

这篇关于使用运行时库的Delphi 64位调试具有错误的堆栈帧活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆