使用运行时库的 Delphi 64 位调试有错误的堆栈帧处于活动状态

2023-12-28

我遇到了 Win64 调试问题,看起来我们“缺少”调试信息。所以我做了一些research https://stackoverflow.com/questions/8793683/delphi-app-has-no-debug-info-when-debugging并为我们的旗舰产品重新创建了所有 .dproj 文件。这很有帮助,因为我找回了“丢失的”蓝色球。

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

另请检查链接的屏幕截图,这应该可以使事情更加清晰。

相关编译器选项

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

版本信息:

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

我尝试过多种调试设置组合,但问题仍然存在于我的系统上。

我同事的计算机在相同的代码中存在完全相同的问题,因此至少可以放心地重现它。当尝试使用带有运行时 bpl 的小项目来重现此问题时,问题似乎不会发生,或者我无法重现它。因此我没有为此发布任何消息来源。

当然,这里有一个问题:

  • 还有其他人经历过吗?
  • 找到解决方案了吗? - 请分享!
  • 没有找到解决方案吗? -> 请为此添加评论/投票issue https://quality.embarcadero.com/browse/RSP-20705

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

  • Breakpoint in source code view
  • Breakpoint in Full CPU view
  • Select sub-top stackframe
  • Going even one lvl deeper, unexpected stack top
  • The previous instruction caused the stack display to get mangled

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

所以我猜想加载符号表时发生了一些事情。当我将调试设置更改为屏幕截图中显示的(加载所有 SYmbols=off,并且 onoy 加载主 bpl 的调试信息)时,瞧我的堆栈和本地变量正确显示。在同一个二进制文件中。当我打开“加载未指​​定模块的符号”时,我回到了缺少堆栈和本地符号的旧情况。

所以我怀疑调试器可以处理的调试信息量是有限的(really? in 64位模式?),我似乎记得很久以前的Delphi 2..7调试。

当然,这样做时我缺乏所有其他单元的调试信息,因此虽然这是一个答案,但它不是最终的解决方案。我再贴一个question https://stackoverflow.com/questions/51098092/is-there-a-limit-to-the-delphi-win64-debugger-symbols-loading-how-can-i-change并在 embarcadero 网站上发布。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用运行时库的 Delphi 64 位调试有错误的堆栈帧处于活动状态 的相关文章

  • 如何调试VS2010安装工程?

    如何调试VS2010安装工程 我尝试附加到 msiexec exe 但没 有帮助 我假设您想在安装程序中调试自定义操作 如果是这样 请在运行安装程序时打开解决方案 并将此行代码放在其中一个事件中 System Diagnostics Deb
  • Delphi 2010:如何将 UTF8 编码的 PAnsiChar 转换为 UnicodeString?

    情况 我有一个外部 DLL 它使用 UTF 8 作为其内部字符串格式 接口函数都使用 PAnsiChar 来传递字符串 我的应用程序的其余部分使用 Delphi 的本机string类型 由于我正在使用 Delphi 2010 这将映射到Un
  • 哪些参数被传递给回溯中的函数?

    在 R 中 如果执行因错误而停止 我可以评估traceback 查看哪个函数发生了错误 哪个函数是从哪个函数调用的 等等 它会给出类似这样的信息 8 ar yw default x aic aic order max order max n
  • winpdb 不适用于 python 3.3

    我无法让 rpdb2 与 python 3 3 一起运行 但根据多个来源 这应该是可能的 rpdb2 d myscript py A password should be set to secure debugger client serv
  • 条件表达式在包内是否被破坏?

    考虑以下片段 requires designide rtl vcl IF RTLVersion lt 19 0 E2026 Constant expression expected IF CompilerVersion 22 0 same
  • 如何调试(最好在 IDE 中)MSBuild 脚本?

    我们非常广泛地使用 MSBuild 作为我们持续集成过程的一部分 虽然它非常强大 我们几乎可以在其中完成所有构建 测试和部署 利用一些自定义任务 我们发现使用标签对其进行调试是一种痛苦 并且不能总是为我们提供足够的信息 我发现 http w
  • FreeMM 与 ShareMem

    我们有很多用 delphi 和 c builder 编写的 dll 库 并使用 sharemem 和 borlndmm dll 3d party 库中的对齐问题迫使我们转向 delphi 2007 中的新内存管理器 有人可以帮我解释一下 共
  • Indy FTP 传输类型

    我正在使用 IdFTP Indy 10 组件从远程位置下载一些文件 zip 和 txt 在获取每个文件之前 我将 TransferType 设置为二进制 IdFTP TransferType ftBinary IdFTP Get ASour
  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • 无法在 UWP 中调试 .NET Standard 2.0 DLL

    我创建了一个新的 Xamarin Forms 解决方案 升级了所有 NuGet 确保 UWP 版本的目标版本为 16299 并确保 NET Standard 项目的目标版本为 2 0 我运行了该项目并能够很好地调试 NET Standard
  • EIdOSSLUnderlyingCryptoError 和“使用 SSL 连接时出错。错误:14094410...”

    我在 OS X 上的 Delphi 10 1 Berlin 中遇到 Indy 组件问题 我正在使用TIdHTTP使用 HTTPS 连接到 Web 服务 问题是从 OS X 客户端连接到服务器 在 OS X 上运行时 我总是遇到同样的错误 P
  • valgrind 和 iOS SDK 4.2?

    使用 valgrind 运行 iOS 4 2 应用程序时遇到问题 我从 Macports 安装了 valgrind 3 6 0 SVN Xcode 3 2 5 当我修改 main 以运行 valgrind 时 我得到以下输出 Detecte
  • 如何远程调试长时间运行的 python 脚本或服务?

    正如标题所说 我希望能够连接到在 Paster 或 uwsgi 下运行的 python 进程并利用 pdb 功能 Using winpdb http winpdb org 您可以像这样附加到正在运行的进程 插入 import rpdb2 r
  • PHPstorm - 无法在blade.php 文件中设置断点

    我正在开发 Laravel 应用程序 可以很好地调试我的控制器 php 文件 但我还想调试blade php 文件 在我当前的设置中 我遵循了所有 jetbrains 为 Laravel 推荐的设置 https confluence jet
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • 当前本地调试 Travis 构建的工作流程是什么?

    One 曾经能够 https stackoverflow com questions 16677232 where can i download the 64 bit travis ci vm images to 下载流浪盒 http re
  • 如何检查给定调用站点的重载决策集

    如何检查重载解析集 我在多个调用站点中使用了 4 个相互竞争的函数 在一个调用站点中 我期望调用一个函数 但编译器会选择另一个函数 我不知道为什么 这不是微不足道的 为了了解发生了什么 我正在使用enable if disable if打开
  • Delphi如何使用其他窗体中的类型?

    抱歉 这是一个非常新手的问题 我正在对这个庞大的应用程序进行维护 它有5种不同的形式 我们将全局变量放在一个单元 uGlobal 中 但我似乎无法从数据单元 uData 访问它 我有这个 Unit uGlobal type TmyType
  • 在 SQLite 数据库中存储日期时间值的最佳方式(Delphi)

    我将把日期时间值存储在 SQLite 数据库中 使用 Delphi 和 DISqlite 库 数据库的本质是它永远不需要在计算机或系统之间传输 因此互操作性不是一个限制 相反 我的重点是阅读速度 日期时间字段将被索引 我将对其进行大量搜索
  • 如何将 JSON 字符串转换为图像?

    我有一个将图像转换为 JSON 数组的应用程序 并将其保存到 blob 字段中 function getImage String var memorystream TMemoryStream jsonArray TJSONArray beg

随机推荐