以前,我曾读到一本讲开发DELPHI元件的好书,写的很精彩,让我受益颇多。不过其中谈到:由于没有办法在源程序基础上调试包中的元件,所以开发元件一定要特别认真仔细的写好元件的代码。的确,用DELPHI5单独打开一个*.DPK文件时,DELPHI的Run(F9)、Step Over(F8)、Track Into(F7)等Debug命令全部无效。自己再想想,DELPHI的IDE又与包文件有着非常密切的关系。在加载了包的IDE运行环境中要调试包本身,似乎有点像逻辑学上的自反悖论。后来,我就一直相信包是不能在源程序基础上调试的。
然而,包是可以直接在DELPHI5的IDE环境内调试原代码的!不但可以调试运行时刻的包(Runtime Package),而且还可以调试设计时刻包(Designtime Package)!
在一次偶然中,我硬是强行将我的包加入到DELPHI的项目组(Project Group)中。这时,我惊奇地发现运行程序的工具按钮是有效的。当时,我真不敢相信自己的眼睛!特别是有那本权威书籍在我脑海中形成的根深蒂固的印象。
随后的实践证明,只要包文件处在一个项目组中,就可以象调试DLL项目一样调试它。只需要在运行参数(Run Paramenters)中设置相应的主应用程序(Host Application),即可开始调试。当然,主应用程序一定要是按包编译(Build with runtime packages)的。
为什么会这样呢?
我想,DELPHI的一个项目文件编译之后最终都会形成一个可执行模块,要么是EXE文件,要么是DLL文件。其实,包编译后的BPL文件也是一个DLL文件,一个可执行模块。因此,DPK文件也相当于是一个项目文件。只是,用DELPHI5打开DPK文件时没有被当作项目打开。而在项目组中,DELPHI把每一个加入的项都当作项目来激活。要知道,一个典型的应用系统常常是由EXE、DLL和BPL共同组成。因此,包作为项目加入到项目组中也是合情合理的,DELPHI也因该是这样处理。
要调试一个单独的包,可以这样操作。首先,关闭DELPHI打开的所有项目,即用File\Close All菜单命令。然后,用View\Project Manager菜单命令打开项目管理器。接着,在项目管理器中按鼠标右键,选择Add Existing Project命令。在弹出的打开文件窗口中,应该选择打开*.DPK的文件。找到你要调试的包文件之后,即可将包文件加入当前项目组中。这时,DELPHI的Run(F9)、Step Over(F8)、Track Into(F7)等Debug命令都是有效的。最后,只需要设置主应用程序(Host Application),即可开始调试包。
如果要调试Designtime Package,或者要调试你开发的元件在IDE环境中的错误,该怎么办呢?很简单,只需要将Host Application设置为Delphi32.exe即可。当然Delphi32.exe的具体位置要看你安装DELPHI的具体目录,典型的是:C:\Program Files\Borland\Delphi5\Bin\目录。这样,你就可随心所欲地调试包在IDE环境下的行为了。不过,不要忘记一定要首先将你的包安装到IDE环境中,否则Delphi32.exe启动时并不会加载未安装的包。
在DELPHI 6中,DPK文件已经完全被当作项目来打开了。DELPHI理当如此处理,虽然太迟,但毕竟还是让我们高兴。迟到的春天阳光似乎更加灿烂......
------摘自《悟透DELPHI》并稍加改编。