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)我们多次调试时,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有时会在没有调试信息的情况下加载?
我会用它来描述我的问题。
我使用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键,然后关闭Modules并CPU视图和罢工F9 (Run)。后initialization段完成我被再次惊动CPU View只是少数-JMP的的退出之前LoadPackage-所以我关闭CPU View和stikeF9又一次。相当乏味,但仍然比 IDE 重新启动要好。
对于我们的特定情况,我们能够通过将 Core.pbl 和 Components.bpl 合并到单个 BPL 中来解决该问题。现在,所有模块都加载了调试信息,并且局部窗口偶尔不显示变量值的问题已得到解决。
| 归档时间: |
|
| 查看次数: |
8237 次 |
| 最近记录: |