文字较多,请耐心看完。解释得详细点总是比一笔带过的好。有说的不清楚或错误之处,欢迎拍砖。
--2010.10.15更新
补充一点,Delphi5加载了模块后要调试dll,别忘了将project->project option->Linker底下的Exe and Dll options中,Include TD32 debug info 与 Include Remote debug symbol勾选上。
--2010.10.15更新 end
之前调试DLL文件,一般都是写一个日志文件函数,输出到硬盘上某个文件或者界面上某个控件上,这在调试普通程序还好,DLL程序就难办了,尤其是别人的代码,使用了第三方控件,所以一定要使用断点调试这一最基本最好用的调试方法。
Delphi的DLL调试网上说法很多,也有挺全面的,都提到了宿主程序的设置和路径设置,却没有多少人提到怎么把DLL加载到调试器里,然后加断点调试。
首先简单介绍一下DLL文件的调试原理:DLL程序需要一个独立的宿主程序(host)来调用它,这个宿主程序是不能和DLL文件在同一工程下的,但是,网上有说法是DLL文件不能在宿主程序的同一目录下,其实这点是可以的,
只要正确的设置并将DLL加载进调试器就行,设置步骤如下:
1、打开dll工程文件,run->run parameters,host application设置为宿主程序(
精确到程序文件),parameter是debug;
2、设置好宿主程序和运行参数后,最好将DLL文件的生成输出目录指定到宿主程序所在的文件夹下,这样子方便调试,不需要每次生成DLL文件后,还要手动从一个文件夹复制到宿主程序所在的文件目录下;然后在编辑好DLL工程后,在想要停止的地方加断点,然后直接点运行;接下来的一步很重要了;
3、点运行将跳出宿主程序,比如一个主框架程序,可能跳出来的是一个登陆框什么的,这不重要,重要之处在于,请切换到Delphi的DLL工程文件上,点击
ctrl+alt+M,跳出一个名叫Module的窗体来。左上角显示了宿主程序本身及其它所调用的资源(一般在windows下应用程序都做成dll形式以减小主程序体积,还有别的使用dll带来的好处),如图:
可以看到一些经常需要调用的dll,如windows的user32.dll等;
右上角显示了dll函数的entrypoint,是每个dll文件export的过程或函数名,供调用;
这里需要注意的是左上角的path,显示了调用的dll文件的地址,系统级的dll文件,或者是在系统环境变量中有值的软件中的dll文件的path都是有值的;你要调试的dll文件一般没有path,所以要reload一下,以便调试器知道你要调试的dll文件是哪个。在reload之前,要在Module窗体中找到你所要调试的dll文件名,如果没有,说明要调试的dll还没有被加载,所以要继续运行宿主程序知道左上角列表的name列里出现了要调用的dll文件名。(所以你最好要清楚所使用的宿主程序何时加载了dll文件);
4、找到dll文件后,选中它,右键,在弹出菜单中选"Reload Symbol Table",将弹出相应的对话框,在Module Path里,设置dll文件的真实路径(精确到文件),比如第2步中提到将dll文件生成在宿主程序所在的文件夹下,那么,在Module Path中所设置的路径将是"宿主程序所在文件夹\dll文件名.dll",设置好后,回到delphi单元文件里设置好的断点处,如果设置正确,断点将会出现红圆加勾(断点有效)或红圆加叉(断点无效);
5、如果此时要调试的dll文件已经运行到了断点后,则在宿主程序中回到断点之前的操作,重新进行就可以在断点处停下了;
注意,Reload好后,继续运行宿主程序,有时会出现假死现象,这可能是由于断点位置设置得不够好导致的,可以调用一下系统任务管理器,切换一下焦点,再切换回delphi,应该能发现程序停在了你所设置的断点处。
接下来,该怎么调就怎么调,随时加断点。摆脱看别人DLL工程文件代码,使用别人控件时的出错不知从何下手的囧境,enjoy programming!
分享到:
相关推荐
在Delphi中,调试DLL(动态链接库)代码是一项重要的任务,特别是在开发过程中需要精确地定位和解决问题时。本文将详细介绍如何在Delphi环境中有效地跟踪和调试DLL代码。 1. **前言** 开发DLL时,由于其代码通常被...
这表明我们已经成功地配置了 Delphi 2010 中的 DLL 断点调试环境。 在 Delphi 2010 中,动态链接库(DLL)的调试过程相比早期版本有所改变,主要是由于 Delphi 从 2009 版本开始引入了 Unicode 支持,导致编译选项...
总之,Delphi 2007的DLL断点调试涉及到对编译器和链接器设置的调整,确保生成包含调试信息的可执行文件和DLL。理解这一过程对于有效地调试和维护Delphi程序至关重要,尤其是在处理跨版本兼容性和复杂系统集成时。
- 使用 Delphi 的调试器可以对 DLL 进行单独调试,同时也可以在主应用程序中设置断点进行联合调试。 综上所述,"Delphi 封装窗体成 DLL" 主要是通过创建 DLL 工程,编写导出函数来显示和管理窗体,然后在主应用...
需要注意的是,虽然这种方法能够有效避免中断,但在实际应用中应谨慎使用,因为直接修改系统DLL文件可能带来潜在的风险。此外,在不同版本的操作系统或编译器环境下,可能需要对上述代码进行适当的调整以适应不同的...
DLL文件的优点在于,它可以被多个程序调用,减少了内存占用,并且有助于维护和更新代码。 在Delphi中,创建DLL的过程主要包括以下几个步骤: 1. 创建新项目:在Delphi集成开发环境中选择“新建”->“工程”,然后...
10. **调试DLL**:使用Delphi的调试器,可以设置断点,查看和修改DLL中的变量,帮助调试过程。 总之,本教程"动态库的创建与调用"是初学者了解和掌握Delphi创建DLL及调用DLL技术的良好起点。通过学习和实践,开发者...
- DLL文件减少了磁盘空间的占用,并且通过减少加载到内存的代码量,提高了系统性能。 - DLL可以用于实现模块化编程,使得代码更易于管理和更新。 2. **在DELPHI中创建DLL项目**: - 打开DELPHI,选择"新建",...
- 调试DLL时,可以设置Delphi为调试模式,并在宿主应用程序中调用DLL函数,以便在DLL代码中设置断点。 6. **在其他应用程序中使用DLL** - 要在Delphi应用程序中使用DLL,需要在项目中导入DLL(`uses`语句不适用于...
DLL文件是一个包含可由多个程序同时使用的代码和数据的库。它们允许开发者共享函数和资源,减少内存占用,提高程序运行效率。 2. **Delphi中的DLL开发** 在Delphi中,创建DLL项目与创建常规的应用程序略有不同。...
对于DELPHI的DLL和OCX控件,反编译工具可以帮助开发者分析这些组件的工作原理,或者在没有源代码的情况下进行调试和修改。这在以下情况下尤其有用: 1. **代码维护**:如果原始开发团队已经解散或丢失了源代码,反...
- DLL文件是Windows操作系统中的一个重要组成部分,它们包含了可执行代码和数据,可供多个程序同时调用。 - 在Delphi中,你可以将某些功能封装到DLL中,然后在需要这些功能的不同项目中调用,而不必将整个项目代码...
设置断点,检查变量,跟踪调用流程,都是调试DLL集成问题的重要步骤。 9. **性能优化**:优化DLL的使用,如减少不必要的DLL导入,避免循环依赖,可以提高程序的启动速度和运行效率。 10. **安全性**:调用DLL时,...
你需要将这两个DLL文件放在你的应用程序目录下,或者将其注册到系统路径,以便Delphi能够正确加载它们。 接下来,我们来讨论如何在Delphi7中使用Indy的IdHTTP组件进行HTTPS GET请求: 1. **导入Indy库**:打开...
"**D4Tdx.dproj.local**"是项目特定的本地设置文件,保存了用户个人的IDE设置,如断点、调试配置等,这些设置可能与团队成员的设置不同,不应用于版本控制。 "**D4Tdx.res**"是资源文件,它可能包含项目的图标、...
4. **调试支持**:可能集成调试器功能,允许用户在反汇编代码中设置断点,逐步执行,查看变量状态。 5. **资源提取**:可能包含提取嵌入到.exe文件中的资源(如图像、文本、数据库连接字符串等)的功能。 6. **...
- 在开发过程中,调试DLL和主应用程序可能需要特殊技巧,比如设置断点、使用远程调试工具等。 - 对于DLL中的数据库操作,需要进行充分的测试,包括正常情况和异常情况,确保其稳定性和准确性。 总的来说,"DELPHI...
- **调试测试**:利用IDE的调试工具进行断点设置、单步执行、变量查看等,确保程序正确无误。 - **发布部署**:编译生成可执行文件,可选择编译为单一文件或者创建安装包,以便于分发和安装。 5. **Delphi 7.0 的...
9. **调试DLL**:使用Delphi的调试工具对DLL进行调试,包括设置断点、查看变量值等。 10. **DLL注入**:虽然这不是常规用途,但DLL也可以用于程序间通信或者系统级别的操作,如动态插入代码到其他运行中的进程。 ...