调试时Delphi App有"无调试信息"

Jam*_* L. 13 delphi debugging packages bpl delphi-xe2

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

_(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
Run Code Online (Sandbox Code Playgroud)

我们有4个项目,都是使用运行时pacakges构建的:

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

观察到的问题

1)我们多次调试时,Components.bpl加载了调试信息,但"Local Variables"窗口中的所有值都是空白的.如果将鼠标悬停在代码中的变量上,则没有弹出窗口,"评估"窗口也不显示任何内容("结果"窗格始终为空白).

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

问题

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

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

Ari*_*The 5

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

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

我可以在SysInternals.com Process Monitor那个 packagename.DCP 中看到在LoadPackage处理后打开并成功读取- 没有文件 I/O 失败,没有尝试在错误的地方找到它,没有任何可疑之处。所以也许 DCP 中有一些构造使 IDE 调试器发疯。我很Turbo Debugger期待可用于 Delphi 的时间

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

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

附注。不知道这是否会帮助我调试初始化部分 - 希望“ break on load”菜单项即使使用动态LoadPackage调用也能工作......

聚苯乙烯。它确实有效,即使 IDE 重新启动也是如此。所以,现在我在BPL装载提醒我用CPU View,我击CTRL+ALT+M,滚动到底找我的BPL,R-点击Reload Symbols,按Enter键,然后关闭ModulesCPU视图和罢工F9 (Run)。后initialization段完成我被再次惊动CPU View只是少数-JMP的的退出之前LoadPackage-所以我关闭CPU View和stikeF9又一次。相当乏味,但仍然比 IDE 重新启动要好。


Jam*_* L. 2

对于我们的特定情况,我们能够通过将 Core.pbl 和 Components.bpl 合并到单个 BPL 中来解决该问题。现在,所有模块都加载了调试信息,并且局部窗口偶尔不显示变量值的问题已得到解决。

  • 结合 BPL 来解决问题并不是一个好的解决方案。想象一下,如果您有数百个动态包,则不可能组合成单个 BPL。 (3认同)