Delphi 德尔福应用程序有;“无调试信息”;调试时
我们已经构建了一个使用包和组件的应用程序。当我们调试应用程序时,IDE中的“事件日志”通常显示加载BPL时没有调试信息(“无调试信息”)。这没有意义,因为我们所有的包和exe都是用debug构建的Delphi 德尔福应用程序有;“无调试信息”;调试时,delphi,debugging,delphi-xe2,packages,bpl,Delphi,Debugging,Delphi Xe2,Packages,Bpl,我们已经构建了一个使用包和组件的应用程序。当我们调试应用程序时,IDE中的“事件日志”通常显示加载BPL时没有调试信息(“无调试信息”)。这没有意义,因为我们所有的包和exe都是用debug构建的 _(each project) | Options | Compiling_ [ x ] Assertions [ x ] Debug information [ x ] Local symbols Symbol reference info = "Reference info" [ ] Use
_(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个项目,都是使用运行时包构建的:
2) 当BPL符合debug且所有调试文件(dcu、map等)都可用时,为什么有时加载BPL时没有调试信息?您必须使用调试信息构建单独的包,并且最终您将希望在不进行调试的情况下构建它们-因此,您将在两个点中同时使用这两个文件。然后,您希望使用调试信息构建应用程序项目。检查路径以确保在调试项目生成中包含启用调试的包源。听起来您可能包含了未经调试构建的包,因为您包含的源代码错误。您必须确保没有同时包含这两个路径,如果Delphi在两个位置找到相同的包,它将选择要包含的内容。对于我们的特殊情况,我们可以通过将Core.pbl和Components.bpl组合成一个bpl来解决此问题。现在,所有模块都加载了调试信息,解决了局部变量窗口不显示变量值的偶尔问题。我们在项目中遇到了类似的问题。不幸的是,我们有几十个bpl,因此无法将它们合并到一个bpl中。 这个问题出现在我们迁移到XE2并更改编译目标的文件夹结构之后。
虽然很难说较新版本的Delphi是否引入了此问题,但我们可以通过在path环境变量中添加BPL编译所在的文件夹来解决此问题。使用IDE的路径覆盖功能。这种类型的配置在Delphi 2010中是不必要的…我将用它来描述我的问题 我使用
LoadPackage
函数动态加载包
我可以在SysInternals.com进程监视器
中看到,在LoadPackage
处理后,packagename.DCP被打开并成功读取-没有文件I/O失败,没有试图在错误的位置找到它,没有可疑之处。所以,也许DCP中有某种构造使IDE调试器发疯。我渴望有几次Turbo调试器
可用于Delphi
顺便说一句,如果开发人员创建了packagename.RSM,那么packagename.RSM也是如此
然后(在断点或步骤跟踪处暂停)我打开查看/调试窗口/模块,看到最后一个模块是我的,它有空的“符号信息”单元。我右键单击它,选择“重新加载符号”操作-从现在开始,我可以调试它
PS.不知道这是否有助于我调试初始化部分-希望“加载中断
”菜单项即使在动态加载包
调用中也能工作
PPS。它确实可以工作,甚至可以跨IDE重新启动。因此,现在我在加载BPL时会被
CPU视图
提醒,我点击CTRL+ALT+M
,滚动到底部找到我的BPL,右键单击重新加载符号
,按Enter,然后关闭模块
和CPU
视图并点击F9(运行)
。在初始化
部分完成后,CPU视图
-在退出加载包
之前,只有几次JMP
-再次提醒我关闭CPU视图
,并再次点击F9
。非常乏味,但仍然比IDE重启要好。此问题可能与以下原因有关:
当DelphiIDE开始引入.dproj文件并使用选项集构建配置时,它大大改进了项目发布管理
然而,它也有一个很难重播和捕捉的副作用,我认为这是IDE中的bug。当某些项目无法在IDE调试器中调试时,这个问题应该总是让用户感到困惑。即使我们检查了项目中编译器和链接选项的所有相关设置,调试器也不会在项目中激活。有些项目有效,有些项目无效。我们甚至认为是内存问题或cpu问题
我注意到问题是由于.dproj文件设置没有存储正确的信息。如果相关的.dproj文件具有以下内容:
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<Import Project="Release.optset" Condition="'$(Cfg_2)'!='' And Exists('Release.optset')"/>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<CfgDependentOn>Release.optset</CfgDependentOn>
</PropertyGroup>
<Import Project="Debug.optset" Condition="'$(Cfg_1)'!='' And Exists('Debug.optset')"/>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<CfgDependentOn>Debug.optset</CfgDependentOn>
</PropertyGroup>
我在.dprj文件中找到了Cfg_2 détails中的一行,其值Debugger_LoadAllSymbols设置为false。我确实把它设定为真的。问题解决了。可能与你的情况不太相似,但可能会有所帮助
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
...
<Debugger_LoadAllSymbols>true</Debugger_LoadAllSymbols>
...
</PropertyGroup>
...
真的
...
这解决了Delphi的许多问题。它修复了没有调试信息的模块加载。我们所有的项目都是用debug构建的,debug和RELEASE都使用相同的输出文件夹。所以它不是职业选手
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
...
<Debugger_LoadAllSymbols>true</Debugger_LoadAllSymbols>
...
</PropertyGroup>