在编写WIN32的窗口程序时,由于其不同于命令行的运行方式,我们经常为调试系统而被折磨的几近抓狂。因此很多通用的方法被设计出来:
设置断点是个好主意,但很多业务层的代码无法有效的调试。
使用对话框、LIST、文件来记录日志,无故增加了设计量不说,每次Release的时候,还要一个一个删除这些调试信息,虽然使用一些配置文件可以达到开关调试的目的,但这些额外的代码却也为系统带来了很多无用的代码。
那么,有没有更加便捷的方法呢?答案是肯定的。
Delphi在编写WIN32程序时,为我们提供了一系列非常有用的编译器指令,那么我们可以用它们来为我们的程序增加一个随叫随到,随放随消的控制台调试窗口,这样会让我们的调试信息更加清晰的反映出来。
我们用到三个delphi的编译器指令:{$APPTYPE}、{$IFDEF}、{$ENDIF}
{$APPTYPE},可以设置程序的运行方式,有两种形式,{$APPTYPE GUI}说明程序是普通窗口模式,而{$APPTYPE CONSOLE}说明程序是命令行控制台模式的,如果在普通窗口程序中会增加一个命令行控制台窗口
{$IFDEF}和{$ENDIF},是条件编译语句
使用以上的编译器指令,我们可以轻松的实现我们的目标(对于这些编译器指令的详细说明可以参见delphi的官方文档),OK,Let's go!
首先,建立一个UNIT,将其命名为ucTConsoleDebuger(这是我的命名方式,uc代表为类声明的unit,后面是类名),并建立TConsoleDebuger类,代码及解释如下:
unit ucTConsoleDebuger;
interface
type
TConsoleDebuger = class(TObject)
public
class procedure DebugThis(debugMsg: string); static; //输出一条信息
end;
implementation
class procedure TConsoleDebuger.DebugThis(debugMsg: string);
begin
{$IFDEF CONSOLE} //编译器条件开关,后面的CONSOLE为判断是否为控制台程序,其值是{$APPTYPE}的值
Writeln(debugMsg);
{$ENDIF} //编译器条件开关结束
end;
end.
TConsoleDebuger类很简单,它只是实现了一个输出函数,而真正的核心在于两条编译器开关。
{$IFDEF CONSOLE} 判断程序的类型,如果是控制台程序,则编译其与{$ENDIF}间的代码(注:由于普通窗口程序中,没有设置writeln的Output流定向,所以执行writeln会出现I/O错误),否则不会编译。
这时,我们只需将{$APPTYPE CONSOLE}放到工程文件的最前端,编译执行程序,就会发现我们的程序多出了一个控制台窗口,所有的writeln信息都会输出到这个窗口。嗯,就是这么简单。
当我们的程序发布时,只需去掉{$APPTYPE CONSOLE},控制台窗口就会消失,那个函数的代码也不会被编译到程序中,嗯,清爽。
当然,这只是一个比较简单的调试方法,一般的调试已足够使用。你还可以使用{$DEFINE XXX}和{$IFDEF XXX} 结合来构造你的调试代码(XXX时任意变量名)。
这里所提到的些许技巧也只是抛砖引玉,你完全可以活用这些编译器指令来设计更加强大、便捷的调试代码。
分享到:
相关推荐
Delphi4编译器.Delphi4编译器.Delphi4编译器.Delphi4编译器.Delphi4编译器.
一个Delphi控制台相关程序,获取cmd控制台命令并显示在窗口上,主要是使用CreateProcess函数来创建一个cmd进程,用TerminateProcess 来释放cmd进程,用ReadFile 来读取命令返回信息,关键代码请下载源码包,里面还...
Delphi禁止系统或指定程序自动关闭/退出,具体自己下载源码一看究竟,可防止程序自动退出的,也可防止windows自动关闭,代码简单,程序运行截图是一个空窗体什么都没有,这里也就不截图了。
Delphi 10.4.2补丁,解决了编译器及内存占用等多个方面的问题
用DELPHI工具开发的调用子窗口DLL模块实例
好东西来的,适合初学,及深入研究DELPHI的精通者。希望对大学有帮助
Delphi编写的日志记录组件源代码,从中可以学习自定义组件的一些技巧,如注册到组件面板、添加自定义图标等。 日志组件具有以下属性及方法: public { Public declarations } procedure AddLog(p_Info: string); /...
delphi编写控制台程序 包括两种如何创建控制台程序 及 readln writeln 的用法实例
日志组件log4delphi与log4j、log4cpp如出一辙 1.安装:log4Delphi无需安装,直接解压包解压后放入任意目录(我的目录是:'D:/3rdlib/delphi/log4delphi-0.7)即可。 2.使用:在工程文件中引用解压包中src目录下...
DELPHI专题文档-程序应用 更改Windows95的墙纸 类似于VB中的doevents功能 DELPHI下的多线程程序设计 用Delphi 3.0编制MP3音乐点歌台 用Delphi开发windows95屏幕保护预览程序 判断一个程序是否dos版本 Delphi...
Delphi编写三个无 Win Forms的控制台程序..rar
DELPHI专题文档-程序应用 更改Windows95的墙纸 类似于VB中的doevents功能 DELPHI下的多线程程序设计 用Delphi 3.0编制MP3音乐点歌台 用Delphi开发windows95屏幕保护预览程序 判断一个程序是否dos版本 Delphi...
delphi 调试时总出现cpu窗口,ntdll.dll点的解决方法delphi 调试时总出现cpu窗口,ntdll.dll点的解决方法
delphi驱动编译器delphi驱动编译器delphi驱动编译器delphi驱动编译器delphi驱动编译器
用Delphi7编写的利用管道技术操作控制的程序。通过这种方式可以实现在常规窗口下实现cmd.exe的所有功能。比如执行一些Dos指令。
Delphi 编写模拟CMD窗口,基于命令提示符的控制台程序,里面不只有一个,好像是三个CMD窗口模拟程序,一个动态动画版的CMD窗口,还有一个为命令行的端口扫描。
delphi程序抓取报错信息不再弹出报错窗口,弹出报错信息很尴尬,现在不用怕了,把错误信息保存到日志文件,后台自己看到错误慢慢修改,增加用户体验。
Delphi应用程序日志写入系统日志,其中还包含普通的应用程序如何把日志写入系统日志。
Delphi程序调试参考手册(修正).pdf
delphi嵌入外部程序 注意 必须知道原始程序名称