Delphi - 如何调试 DLL
网上看到很多人问delphi中如何调试 DLL 的,众大侠回答也基本一致,但是,我使用时却时灵时不灵,今天发现了原因。
完整的调试 DLL方法如下:
1)新建一个 DLL 工程,名字就叫 MyDll 吧,编译后生成 MyDll.dll,我们要调试的就是它了。
2)新建一个用来调试 MyDll 的 Application 工程,名字就叫 MyDllTest 吧,编译后生成的可执行性文件为 MyDllTest.exe,这就是我们用来调试 MyDll.dll 的宿主程序
3)MyDllTest.exe 所在目录中不能有 MyDll.dll(重要!)
4)MyDllTest 采用静态调用的方法调用 MyDll.dll 的导出函数(重要!)
5)进入 MyDll 工程,执行菜单“Run”->“Parameters”,将弹出的对话框的 Local 页中的“Host Application”设置为上面的 MyDllTest.exe(含路径)
完成以上步骤,就可以在 MyDll 工程中执行“Run”了,也可以进行调试。
以上3)、4)、5)为重点,第三点在大多数网上的解答中都没有提到,也是我使用时时灵时不灵的原因(不清楚这个原因前,我还特地把 MyDll.dll 复制到 MyDllTest.exe 所在目录下,导致调试不能进行)。
在网上有人提到要把工程配置中的“Directories/Conditions”页中的“Output Direcotry”清空,也就是说输出目录要为工程文件所在目录,我试了一下,将其设置为“./bin”,也同样完全可以调试,因此输出目录是什么无关紧要。
[ 补充 ] 还要注意的是,调试 dll 的时候,被调试的 dll 和宿主程序不能在同一个 Project Group中,也就是说,你不要把 dll 和宿主程序放在同一个 Project Group中再进行调试,一定要单独打开 dll 工程进行调试。否则,调试也会不成功。 (2006-12-04 新发现)
补充:(源于fengzhizhu大侠的回复)如果上述方法不管用,那么关闭工程,然后再打开要调试的工程,一般即可。
---------------------------------------------------------------------------------------------------------------
其实,"时灵时不灵",是由于DELPHI的"活动路径"造成的.楼主说的方法固然可行,但在下觉得不是根本原因.
所谓"活动路径",就是在DELPHI中在代码中最后打开过的文件所在的文件路径,如果该路径不是你要调试的DLL所在路径,你设的断点一般是不会被中断的.当你通过打开该DLL的PAS后,再调试,此时即可以中断了.
参考: