写程序避免不了调试,每种工具都有自己的代码调试方式。但应作到规范的写代码,形成良好的代码书写习惯和风格,也能避免很多不必要的错误。应该先写思路再写代码并赋予合理适量的注释,尽量降低调试次数。以下说说delphi的调试方式。调试方式多样,适用也不同,应该择代码使用合适的调试方式。打印调试信息时可以在conditional defines中填写Debug,相对于c语言的 #define,这是对所有工程文件有效的。编译器会把{$IFDEF DEBUG}...{$ENDIF}中的代码编译进二进制文件。如果只是在单个文件中使用就不需要在这里定义,直接在文件中定义即可,如:{$DEFINE MYDEBUG}。更详细的编译指令说明可以参考delphi的帮助文件。

  1.弹出对话框

  弹出对话框不失为一种简单的调试方式,直观,基本能做一些简单的调试。弹出对话框作为提示倒是不错的,但对于频繁出的调试信息的是不合适的。

  {$IFDEF DEBUG}

  ShowMessage(sDebugMsg);

  {$ENDIF}

  2.写日志文件

  对于会产生大量调试信息的,而且bug是偶尔出现的,那么必须让程序自己运行,如果人工不停的跟踪必然效率低下,这事如果将bug产生时需要的信息写入文件是一种不错的方法,比如写入文本文件。随后根据文件写入的bug来分析代码即可达到目的。

  {$IFDEF DEBUG}

  AddDebugInfo(sMsg);

  {$ENDIF}

  3.使用断点、watch, Evaluate(Ctrl+F7)

  对于一些前期的调试,一般使用下断点,建立监视点,断点时查看某个变量的值。根据运行时数据来达到调试的要求。

  4.使用DebugView

  DebugView现在Sysinternals的一款工具,他可以显示运行中的程序通过OutputDebugStringA(W)输出的信息,当调试多线程程序时是比较有用处的。但必须要记得启动dbgView.exe,否则是无法看到任何信息的。当然在delphi的ide中调试时这些信息会显示在ide的event log中。

  {$IFDEF DEBUG}

  OutputDebugString(sMsg);

  {$ENDIF}

  5.使用WinDebug

  WinDebug是微软公司的一款调试工具,难于查找的疑难杂症才会用到它(个人这么认为),一般的调试不会用到它,使用它的调试成本并不低,而且需要投入时间去学习,所以比起ide中整合的调试环境来说更麻烦。但有些运行中应该程序突然崩溃,而且没有什么规律,偶然性很高,这个时候你可能把代码也分析了,但一时半刻看不出那段代码出了问题,处于比较郁闷的状态。如果你这时把他的dump写磁盘或者通过在WinDebug在运行产生Dump文件,我们就可以通过在WinDebug中分析dump文件来缩小问题查找范围,甚至能锁定发生问题的代码。WinDebug对查找一些疑难杂症还是比较方便的,当然WinDebug调试并不是那么容易的,有兴趣可以到微软官网下载工具及文档研究学习。