gpt4 book ai didi

Delphi App调试时出现 "No Debug Info"

转载 作者:行者123 更新时间:2023-12-03 14:37:45 39 4
gpt4 key购买 nike

我们构建了一个使用包和组件的应用程序。当我们调试应用程序时,IDE 中的“事件日志”通常会显示我们的 BPL 正在加载,但没有调试信息(“无调试信息”)。这是没有意义的,因为我们所有的包和 EXE 都是通过调试构建的。

_(each project) | Options | Compiling_
[ x ] Assertions
[ x ] Debug information
[ x ] Local symbols
Symbol reference info = "Reference info"
[ ] Use debug .dcus
[ x ] Use imported data references

_(each project) | Options | Linking_
[ x ] Debug information
Map file = Detailed

我们有 4 个项目,全部使用运行时包构建:

  1. Core.bpl
  2. 组件.bpl
  3. Plugin.bpl(同时使用 #1 和 #2)
  4. MainApp.exe(使用#1)

观察到的问题

1) 很多时候,当我们调试时,Components.bpl 会加载调试信息,但“局部变量”窗口中的所有值都是空白。如果将鼠标悬停在代码中的变量上,则不会弹出窗口,并且评估窗口也不会显示任何内容(“结果” Pane 始终为空)。

2) 有时,事件日志会显示各种 BPL 的“无调试信息”。例如,如果我们激活 Plugin.bpl 项目并将其设置为 Run |将参数的主机应用程序设置为 MainApp.exe,然后按 F9,除了 Plugin.bpl 模块之外,所有模块似乎都加载了“Has Debug Info”。加载时,事件日志显示“无调试信息”。但是,如果我们关闭应用程序并立即按 F9,它将再次运行它而无需重新编译任何内容,并且这次 Plugin.bpl 会加载调试(“具有调试信息”)。

问题

1) 什么会导致“局部变量”窗口显示值?

2) 当 BPL 符合调试并且所有调试文件(dcu、map 等)可用时,为什么有时会在没有调试信息的情况下加载 BPL?

最佳答案

我会用它来描述我的问题。

我使用 LoadPackage 函数动态加载包。

我可以在 SysInternals.com Process Monitor 中看到 packagename.DCP 在 LoadPackage 处理后打开并成功读取 - 没有文件 I/O 失败,没有尝试查找它在错误的地方,没有什么可疑的。 所以,也许 DCP 中的某些构造会使 IDE 调试器变得疯狂。我渴望 Turbo Debugger 可用于 Delphi

顺便说一句,如果开发人员创建了 packagename.RSM,则同样如此。

然后(在断点或步骤跟踪处暂停)我打开查看/调试窗口/模块并看到最后一个模块是我的 - 并且它有空的“符号信息”单元格。我右键单击它,选择“重新加载符号”操作 - 就在这里,从现在开始我可以调试。

PS。不知道这是否会帮助我调试初始化部分 - 希望“加载时中断”菜单项即使在动态 LoadPackage 调用中也能工作...

PPS。即使 IDE 重新启动,它确实可以工作。因此,现在我在使用 CPU View 加载 BPL 时收到警报,我按下 CTRL+ALT+M,滚动到底部找到我的 BPL,r-单击以重新加载Symbols,按 Enter 键,然后关闭 ModulesCPU View 并按 F9(运行)。在初始化部分完成后,我再次收到CPU View的警报 - 在退出LoadPackage之前只需几个JMP -所以我关闭了CPU View并再次按下F9。相当乏味,但仍然比 IDE 重启好。

关于Delphi App调试时出现 "No Debug Info",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793683/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com