功能强大的 vc6 调试器
作者:yy2better
要成为一位优秀的软件工程师,调试能力必不可缺。本文将较详细介绍 VC6 调试
器的主要用法。
windows 平台的调试器主要分为两大类:
1 用户模式(user-mode)调试器:它们都基于 win32 Debugging API,有使用
方便的界面,主要用于调试用户模式下的应用程序。这类调试器包括 Visual C++
调试器、WinDBG、BoundChecker、Borland C++ Builder 调试器、NTSD
等。
2 内核模式(kernel-mode)调试器:内核调试器位于 CPU 和操作系统之间,一旦
启动,操作系统也会中止运行,主要用于调试驱动程序或用户模式调试器不易调试
的程序。这类调试器包括 WDEB386、WinDBG 和 softice 等。其中 WinDBG 和
softice 也可以调试用户模式代码。
国外一位调试高手曾说,他 70%调试时间是在用 VC++,其余时间是使用
WinDBG 和 softice。毕竟,调试用户模式代码,VC6 调试器的效率是非常高的。
因此,我将首先在本篇介绍 VC6 调试器的主要用法,其他调试器的用法及一些调试
技能在后续文章中阐述。
一 位置断点(Location Breakpoint)
大家最常用的断点是普通的位置断点,在源程序的某一行按 F9 就设置了一个位置
断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:
void CForDebugDlg::OnOK()
{
for (int i = 0; i < 1000; i++) //A
{
int k = i * 10 - 2; //B
SendTo(k); //C
int tmp = DoSome(i); //D
int j = i / tmp; //E
}
}
执行此函数,程序崩溃于 E 行,发现此时 tmp 为 0,假设 tmp 本不应该为 0,怎
么这个时候为 0 呢?所以最好能够跟踪此次循环时 DoSome 函数是如何运行的,但
由于是在循环体内,如果在 E 行设置断点,可能需要按 F5(GO)许多次。这样手
要不停的按,很痛苦。使用 VC6 断点修饰条件就可以轻易解决此问题。步骤如下。
1 Ctrl+B 打开断点设置框,如下图: