如何在Delphi 10.4中为动态加载的BPL文件激活断点?
Delphi 动态加载BPL断点失效解决思路
- 确认宿主加载的BPL与编译输出的是同一文件
很多情况下断点失效是因为LoadPackage加载的是其他目录下的旧版无调试信息的BPL,而非你刚编译完成的版本。可在LoadPackage执行前输出实际加载的BPL全路径,和BPL项目输出目录的文件路径做比对,确保二者完全一致。 - 核对BPL项目的调试配置
- 编译器选项页:勾选「Debug information」「Local symbols」「Reference info/Definitions only」,完全关闭代码优化选项,优化会导致行号偏移、调试符号不匹配
- 链接器选项页:必须勾选「Include TD32 debug info」,禁止勾选「Strip debug info」
- 确保两个项目编译配置完全匹配
XXX.exe和BBB.bpl的编译目标(32位/64位)、编译版本(Debug/Release)、RTL选项、条件编译参数必须完全一致,任意一项不匹配都会导致调试符号无法正常关联。 - 手动加载BPL调试符号
启动调试后,打开View->Debug Windows->Modules模块窗口,找到加载的BBB.bpl条目,右键选择「Reload Symbols」手动重载符号。同时在Tools->Options->Debugger Options->Symbol Search Path中添加BPL项目的DCU输出目录,确保调试器可以找到对应的符号文件。 - 检查调试权限
如果XXX.exe需要管理员权限运行,必须右键选择「以管理员身份运行」启动Delphi IDE,否则调试器没有权限读取宿主进程的加载符号,导致BPL断点失效。 - 清除编译缓存重试
删除两个项目目录下所有临时文件(.dcu、.dsk、.obj、.map),清空输出目录的旧文件,先编译XXX.exe再编译BBB.bpl,之后重新启动调试。
内容的提问来源于stack exchange,提问作者Michael Haitz
相关产品推荐
相关产品推荐

