在编写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时任意变量名)。
这里所提到的些许技巧也只是抛砖引玉,你完全可以活用这些编译器指令来设计更加强大、便捷的调试代码。
分享到:
相关推荐
使用编译器指令`{$APPTYPE CONSOLE}`来指定当前程序是一个控制台应用程序。这意味着程序将在控制台窗口中运行而不是在一个图形界面中。 ##### 3. 使用单元 ```pascal uses SysUtils; ``` 在Delphi中,通过`uses`...
9. **Unicode支持**:尽管Delphi 4本身不完全支持Unicode,但它为后续版本的Unicode支持打下了基础,这对于处理多种语言的应用程序至关重要。 10. **文档和社区支持**:Delphi 4有丰富的在线文档和活跃的用户社区,...
Delphi 10.4.2编译器补丁是一个重要的软件更新,旨在解决开发者在使用这个版本的Delphi编译器时遇到的各种问题。这个补丁主要关注编译器性能和内存管理优化,以提升开发效率和系统稳定性。下面我们将深入探讨这个...
一个Delphi控制台相关程序,获取cmd控制台命令并显示在窗口上,主要是使用CreateProcess函数来创建一个cmd进程,用TerminateProcess 来释放cmd进程,用ReadFile 来读取命令返回信息,关键代码请下载源码包,里面还...
在 Delphi IDE 中,编译器的使用是开发高效、高质量应用程序的关键步骤。这篇关于“DELPHI IDE编译器使用大全”的内容旨在帮助初学者和高级开发者更好地理解和利用 Delphi 的编译器功能。 首先,Delphi 的快速高效...
本资源“Delphi CMD基于命令提示符的控制台程序.rar”是一个集合,包含了使用Delphi编写的几个模拟CMD(Command Prompt)窗口的应用程序。CMD是Windows操作系统中的命令行接口,允许用户通过输入命令来执行各种系统...
`{$APPTYPE CONSOLE}`告诉编译器创建一个控制台程序,而如果删除这一行,Delphi将默认创建一个带窗体的GUI应用程序。 当我们创建一个新的Delphi7项目时,通常会得到一个默认的VCL(Visual Component Library)窗体...
在Delphi编程环境中,开发控制台程序是一种基本的实践,尤其对于学习系统级编程和进行简单任务自动化来说。本教程将带你了解如何在Delphi中创建一个不依赖于Win Forms的控制台应用程序,并通过三个实例深入理解其...
在IT行业中,Delphi是一种基于Pascal语言的集成开发环境(IDE),用于创建桌面应用程序。...无论是控制台程序、隐藏窗口还是服务,都需要深入理解Delphi的事件处理机制和Windows API,以确保程序能够正确、稳定地运行。
在Delphi编程环境中,开发一个应用常常涉及到主程序与多个子窗口或子模块之间的交互。主程序调用子窗口(多窗口)是一个常见的设计模式,它有助于实现软件的模块化和功能拆分,提高代码的可维护性和复用性。本实例...
### Delphi调试时总出现CPU窗口,ntdll.dll断点的解决方法 在Delphi开发过程中,有时开发者会遇到一个令人头疼的问题:在调试程序时,频繁地出现CPU窗口,并且断点总是停在`ntdll.dll`中的`DbgBreakPoint`函数上。...
- 如果你已经有一个现有的VCL项目,或者想从头开始,你可以在`program`声明中添加`{$APPTYPE CONSOLE}`,告诉编译器这是一个控制台应用程序。例如: ```pascal program ConsoleApp; {$APPTYPE CONSOLE} ...
本主题聚焦于使用Delphi编程语言将应用程序日志写入系统日志,这对于系统管理和故障排查尤其重要。下面我们将深入探讨这个话题。 首先,Delphi是一种基于Object Pascal的集成开发环境(IDE),广泛用于创建Windows...
描述中提到的"通过这种方式可以实现在常规窗口下实现cmd.exe的所有功能",这意味着我们可以用Delphi程序模拟命令行环境,而不必打开单独的cmd窗口。用户可以直接在我们的程序中输入命令,程序会通过管道将命令传递给...
Delphi写的编译器源码(可视化窗口)。程序在界面方面使用了listview 和 Treeview控件,有预览效果。使用时注意,要添加的资源和生成后的资源文件不要保存到含有空格和汉字的文件夹中,否则编译器无法识别。 请...
在IT行业中,日志记录是软件开发中的一个关键环节,特别是在使用Delphi这种强大的面向对象编程语言时。日志能够帮助开发者追踪程序运行状态,定位和解决错误,以及理解程序在不同环境下的行为。本资源提供了"delphi...
2. 在主程序单元中,导入`System.ConsoleKey`和`System.Classes`库,以便使用相关的键盘事件和控制台操作。 3. 定义一个变量来存储已输入的密码,如`var Password: string;`。 4. 设置一个循环,监听键盘输入,直到...
在这个特定的场景中,"delphi 实现多窗口文档编译器—众森相"指的是一个由Delphi语言编写的程序,它允许用户在多个窗口中同时编辑和管理多个文档。这样的编译器对于提高开发人员的工作效率和多任务处理能力具有显著...
标题"Delphi编写三个无 Win Forms的控制台程序"暗示了我们将探讨如何在没有图形界面的情况下使用Delphi编写命令行程序。这可能包括简单的文本输入/输出处理、系统调用以及更复杂的逻辑处理。以下是这些控制台程序...
本主题聚焦于“Delphi操作其他程序窗口”,这是一项涉及进程间通信(Inter-Process Communication, IPC)的技术,允许一个应用程序影响或控制另一个程序的界面。 首先,要操作其他程序的窗口,你需要了解Windows ...