_(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个项目,全部使用运行时间计划构建:
> Core.bpl
> Components.bpl
> Plugin.bpl(同时使用#1)
> MainApp.exe(使用#1)
观察到问题
1)当我们调试很多次,Components.bpl加载了调试信息,但是“局部变量”窗口中的所有值都为空.如果将鼠标悬停在代码中的变量上,则没有弹出窗口,“评估”窗口也不显示任何内容(“结果”窗格始终为空).
2)有时,事件日志显示各种BPL的“无调试信息”.例如,如果我们激活Plugin.bpl项目并将其设置为Run |参数的主机应用程序成为MainApp.exe,然后按F9,除了Plugin.bpl模块,所有模块似乎都加载了“有调试信息”.加载时,事件日志显示“无调试信息”.但是,如果我们关闭应用程序并立即按F9,它将再次运行它而不重新编译任何东西,此时Plugin.bpl加载了debug(“具有调试信息”).
问题
1)什么会导致“本地变量”窗口不显示值?
2)为什么当BPL符合调试和所有调试文件(dcu,map等)可用时,为什么BPL有时加载没有调试信息?
解决方法
我使用LoadPackage函数动态加载包.
我可以在SysInternals.com进程监视器中看到packagename.DCP在LoadPackage处理完成后开始读取,没有文件I / O失败,没有尝试在错误的地方找到它,没有任何可疑.所以也许在DCP中有一些构造使IDE调试器变得坚果.我很久以前Turbo Debugger可用于Delphi.
BTW,同样是packagename.RSM是一个创建这样的.
然后(在断点或步进跟踪暂停),我打开查看/调试Windows /模块,看到最后一个模块是我的 – 它有空的“符号信息”单元格.我右键单击它,选择“重新加载符号”操作 – 在这里,从现在起,我可以调试.
PS. Dunno,如果这将帮助我调试初始化部分,尽管 – 希望“打破负载”菜单项将工作,即使动态的LoadPackage调用…
PPS.它确实工作,甚至跨IDE重新启动.所以现在我在BPL加载cpu查看警报,我打CTRL ALT M,滚动到底部找到我的BPL,r点击重新加载符号,按Enter,然后关闭模块和cpu视图,并触击F9(运行).初始化部分完成后,我再次通过cpu视图提醒 – 只有少数JMP在退出LoadPackage之前 – 所以我再次关闭cpu View和stike F9.相当繁琐,但仍然比IDE重新启动.