VC 调试基础
概述
调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序
员就意味着他即使会一门语言,却不能编制出任何好的软件。
这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。
本文约定,在选择菜单时,通过/表示分级菜单,例如 File/Open 表示顶级菜单 File
的子菜单 Open。
设置
为 了 调 试一个程 序 , 首 先 必 须 使程序中 包 含 调 试 信 息 。 一 般 情 况 下 , 一 个 从
AppWizard 创建的工程中包含的 Debug Conguration 自动包含调试信息,但是是不是
Debug 版 本 并 不 是 程 序 包 含 调 试 信 息 的 决 定 因 素 , 程 序 设 计 者 可 以 在 任 意 的
Conguration 中增加调试信息,包括 Release 版本。
为了增加调试信息,可以按照下述步骤进行:
打开 Project settings 对话框(可以通过快捷键 ALT+F7 打开,也可以通过 IDE 菜
单 Project/Settings 打开)
选择 C/C++页,Category 中选择 general ,则出现一个 Debug Info 下拉列表框,
可供选择的调试信息 方式包括:
命令行 Project settings 说明
无 None 没有调试信息
/Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代
码行信息,不包含符号调试信息
/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,
包括变量名及类型,函数及原型等
/Zi Program Database 创建一个程序库(PDB),包括类型信息和符号调试信息。
/ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项
允许对代码进行调试过程中的修改和继续执行。这个选项同时使 #pragma 设置的优化功
能无效
选择 Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信
息写进可执行文件和 DLL
如果 C/C++页中设置了 Program Database 以上的选项,则 Link incrementally
可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),
而不必每次都从头开始编译。
断点
断点是调试器设置的一个代码位置。当程序运行到断点时,程序中断执行,回到调试
器。断点是 最常用的技巧。调试时,只有设置了断点并使程序回到调试器,才能对程序进
行在线调试。
设置断点:可以通过下述方法设置一个断点。首先把光标移动到需要设置断点的代码
行上,然后
按 F9 快捷键
弹出 Breakpoints 对话框,方法是按快捷键 CTRL+B 或 ALT+F9,或者通过菜单
Edit/Breakpoints 打开。打开后点击 Break at 编辑框的右侧的箭头,选择 合适的位置信
息。一般情况下,直接选择 line xxx 就足够了,如果想设置不是当前位置的断点,可以选
择 Advanced,然后填写函数、行号和可执行文件信息。
去掉断点:把光标移动到给定断点所在的行,再次按 F9 就可以取消断点。同前面所
述,打开 Breakpoints 对话框后,也可以按照界面提示去掉断点。
条件断点:可以为断点设置一个条件,这样的断点称为条件断点。对于新加的断点,
可以单击 Conditions 按钮,为断点设置一个表达式。当这个表达式发生改变时,程序就
被中断。底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的