如何在Delphi中调试DLL文件

8
我是一名开发人员,主要使用Visual C++进行编程,但在我的项目中有一些Delphi组件。我需要调试这些Delphi组件以解决一些问题。
生成DLL文件并在Delphi中开始调试必须具备哪些条件?
3个回答

22
在 Delphi 7 中,您可以执行以下操作:

项目 | 选项 | 编译器 | 调试 | 调试信息(勾选)

然后转到 运行 | 参数 | 宿主应用程序 并输入exe的名称.

在 DLL 代码中添加一些断点,然后单击运行。 您的exe将被加载,您可以在Delphi IDE中调试DLL部分。

如果您的 exe 已经在运行,请单击运行 | 附加到进程

-- 我已经测试过,并发现我还需要在 Delphi 7 的项目选项的链接器页面上检查“包括远程调试符号”。

我能够使用“运行 | 参数”和“运行 | 附加到进程”两种方法使断点命中。我创建了一个带有单个stdcall函数并由Visual C++控制台应用程序动态加载的测试DLL。


2
远程调试符号不应该是必需的。 - dummzeuch
1
我正在使用Delphi 5.0,一旦构建了dll,我就将其放置在其他dll所在的单独文件夹中。当我在二进制代码中设置断点时,通过转到显示loadedModules并转到我的dll,单击我的导出方法,它会中断,但是当我执行show code时,它不起作用。 - coolcake
1
在使用 Delphi 5 和一个较新的操作系统 (XP+) 时,你需要将当前的 IDE 目录设置为 DLL 所在的文件夹,然后再启动主应用程序 (或从“模块”窗口重新加载符号)。 - Paul-Jan
1
谢谢Paul-Jan的提示,我能够在断点处中断了。我只需要进行一点小调整就可以实现中断,我选择在加载dll时中断,然后断点就启用了。非常感谢!!! - coolcake
1
远程调试符号不应该是必需的,但我发现 Delphi 经常无法加载 DLL 的调试符号,但当启用远程调试符号时可以解决。也许应该将其记录在文档中,也许这是一个 bug,但启用它有帮助且不会造成任何损害。 - user160694
显示剩余4条评论

4
我们经常使用这个功能(使用Delphi)。
请务必:
  1. 在所有项目(DLL文件)上启用所有调试选项。并禁用优化。
  2. 确保将宿主应用程序设置为正确的EXE文件。
  3. 构建DLL文件。
现在,您可以在dll和exe中设置断点。并从IDE运行DLL文件。它会启动EXE文件并停止在请求的断点处。
即使DLL文件是动态链接的(如果它们被卸载,则蓝色点会消失),它也可以正常工作。

0
Gamecat 建议的方法是我以前用过的。 另一种方法是:我有 DLL 项目,但我也制作了一个“测试台”项目。 “测试台”项目有一个表单,可以直接运行通常在 DLL 中使用的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接