1、Visual C+ 6.0 调试功能 这是我自己在学习时整理的 ,希望对大家有用 .其中有几个部分 的内容 ,如下 : My Note 全部由我截图并参考资料进行说明 ,这其中有大量的内容是调试过程中体会总结 才写 的 .有不当之处请大家更正 . From Visual C+ Debugger 这本书写得非常的不错 ,从里面截了一些有用的图 ,主要是强烈推荐大家阅读这本书 . Debug Menu From MSDN 这是我从 Visual C+ 6.0 MSDN Library October 2001 中查来的 ,在 My Note 中有很多是从那里参考的 .强烈推荐大家看这份英文说明 .
2、 From visual C+ 6.0 开发工具与调试 这是我从网络上搜索到的 ,问题很经典 ,强烈推荐大家参看学习 ,避免不必要的错误 . My Note 常用功能 : 1. Restart(Ctrl+shift+F5):此 debugger 功能将从程序的开始 (第一有效行 )处全速 执行 , 而不是从当前所跟踪的位置开始调试 , 这时所有变量的当前值都将被丢弃 ,debugger 会自动停在程序的 main()开始处 .这时 如果选择 Step Over(F10)就可以逐步执行 main()函数了 . 2. Stop Debugging(Shift+F5):此 debugger 功能将终
3、止 (所有 )调试 ,并返回到常规编辑状态 . 3. Break(此功能 常常在 遇到 调用函数的语句 时可见 .):此功能将在调试过程中的debugger 当前位置挂起程序的执行 ,然后就可以在调试状态一修改程序的代码 ,接着可以用 Apply Code Changes(Alt+F10)来应用修改的代码到正在调试的程序当中 .如 果 ,当前 (需要 ,待 )可以 (从 DOS 等窗口 )输入值 ,挂起后将不能 再 输入 . 4. Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应用 (挂起 )修改 后 的源代码 .如 ,选择 Break 功能 并 修
4、改代码 后 ,只要选择 Apply Code Changes(Alt+F10)就能将修改后的代码 应用到正在调试的程序当中 . 5. Show Next Statement(Alt+Num*):此功能将显示程序代码的下一条语句 ,如果源代码中找不到 ,则在 Disassembly 窗口中显示语句 .当在 Disassembly 窗口中显示时 ,可以单击 Disassembly 返回到源代码窗口 . 6. Step Into(F11):此功能可以单步进入 到 在 调试 过程中 所 跟踪 的调用函数的语句的函数内部 .如 ,当前语句是 ”d.Display()”,选择 Step Into(F11)
5、后 ,Debugger 将进入Display()函数 内部 并停在 Display()函数 内部 的第一条语句上 .(此时 ,就可以 Step Over(F10)对 Display()函数进行单步调试了 .) 7. Step Over(F10):此功能可以 单步对所在函数单步调试 ,如果调试的语句是一个调用函数的语句时 ,Debugger 将全速执行所调用的函数 ,单步 (一步 )通过所调用的函数 ,Debugger 停该调用语句的下一条语句上 . 8. Step Out(Shift+F11):此功能将 使 Debugger 切换回 全速执行 到被调用函数结束 ,并停在该函数调用语句的下一条语
6、句上 .当确定所调用的函数没有问题时可以用这个功能全速执行 被调用函数 . 9. Run to Cursor(Ctrl+F10):此功能将 全速执行到包含插入点 光标 所在的行 ,可以作为在插入点光标处设置常规断点的一种选择 .注意 ,当光标处不是一个有效的执行语句时此功能将不起作用 . 10. Go(F5):此功能将全速执行程序直到遇到一个断 点或程序结束 ,或直到程序暂停等待用户输入 . 注意 ,此功能最能有效的调试循环 ,常将断点设置在循环体内 ,重复的按F5 全速执行循环体 可以 测试循环过程中的产生的变化 . 11. Step Into Specific Function:此功能可以
7、 可以单步通过程序中的指令 ,并进入指定的函数调用 ,此功能对于函数的嵌套层不限 . 调试常用快捷键 单步进入 F11 单步跳过 F10 单步跳出 SHIFT+F11 运行到光标 CTRL+F10 开关断点 F9 清除断点 CTRL+SHIFT+F9 Breakpoints(断点管理 ) CTRL+B 或 ALT+F9 GO F5 Compile(编译 ,生成 .obj 文件 ) CTRL+F7 Build(组建 ,先 Compile 生成 .obj 再 Link 生成 .exe) F7 From Visual C+ Debugger Debug Menu From MSDN Start De
8、bug Commands (Build menu) Menu command Action Go Executes code from the current statement until a breakpoint or the end of the program is reached, or until the application pauses for user input. (Equivalent to the Go button on the toolbar.) Step Into Single-steps through instructions in the program,
9、 and enters each function call that is encountered. Run to Cursor Executes the program as far as the line that contains the insertion point. This is equivalent to setting a temporary breakpoint at the insertion point location. Attach to Process Attaches the debugger to a process that is running. The
10、n you can break into the process and perform debugging operations like normal. When you begin debugging, the Debug menu appears, replacing the Build menu on the menu bar. You can then control program execution using the commands listed in the following table. Debug Menu Commands that Control Program
11、 Execution Debug menu command Action Go Executes code from the current statement until a breakpoint or the end of the program is reached, or until the application pauses for user input. (Equivalent to the Go button on the Standard toolbar.) When the Debug menu is not available, you can choose Go fro
12、m the Start Debug submenu of the Build menu. Restart Resets execution to the first line of the program. This command reloads the program into memory, and discards the current values of all variables (breakpoints and watch expressions still apply). It automatically halts at the main( ) or WinMain( )
13、function. Stop Debugging Terminates the debugging session, and returns to a normal editing session. Break Halts the program at its current location. Step Into Single-steps through instructions in the program, and enters each function call that is encountered. When the Debug menu is not available, yo
14、u can choose Step Into from the Start Debug submenu of the Build menu. Step Over Single-steps through instructions in the program. If this command is used when you reach a function call, the function is executed without stepping through the function instructions. Step Out Executes the program out of
15、 a function call, and stops on the instruction immediately following the call to the function. Using this command, you can quickly finish executing the current function after determining that a bug is not present in the function. Run to Cursor Executes the program as far as the line that contains th
16、e insertion point. This command is equivalent to setting a temporary breakpoint at the insertion point location. When the Debug menu is not available, you can choose Run To Cursor from the Start Debug submenu of the Build menu. Step Into Specific Function Single steps through instructions in the pro
17、gram, and enters the specified function call. This works for any number of nesting levels of functions. The following additional commands appear on the Debug menu: Exceptions Displays the Exceptions dialog, which you can use to specify how you want the debugger to handle your program exceptions. Thr
18、eads Displays the Threads dialog, which you can use to suspend, resume, or set focus to progam threads. Show Next Statement Shows the next statement in your program code. If source code is not available, displays the statement within the Disassembly window. QuickWatch Displays the Quick Watch window
19、, where you can work with expressions. From visual C+ 6.0 开发工具与调试 1、 如何快速地 规 范代 码缩进 格式 选 中所需要 规 范的代 码 ,按 shift+F8 2、 如何在 Release 状态 下 进 行 调试 Project Setting ProjectSetting 对话 框, 选择 Release 状态 。 C/C+标签 中的Category 选 General, Optimizations 选 Disable(Debug), Debut info 选 Program Database。在 Link 标签 中 选 中
20、 Generate debug info 复选 框。 注:只是一 个 介乎 Debug 合 Release 的中 间状态 ,所有的 ASSERT、 VERIFY 都不起作用,函 数调 用方式已 经 是 真 正的 调 用,而不 查 表,但是 这种状态 下 QuickWatch、 调 用 队 列跟踪功能仍然有效,和 Debug 版一 样 。 3、 Release 和 Debug 有什 么 不同。 Release 版 称为发 行版, Debug 版 称为调试 版。 Debug 中可以 单 步 执 行、跟踪等功能,但生成的可 执 行文件比 较 大,代 码运 行速度 较 慢。Release 版 运 行速
21、度 较 快,可 执 行文件 较 小,但在其 编译条 件小无法 执 行 调试 功能。 Release 的 exe 文件 链 接的是 标 准的 MFC DLL(Use MFC in a shared or static dll),比如MFC42.DLL。 这 些 DLL 在安装 Windows 的 时 候,已 经 配置,所以 这 些程序能 够 在 没 有安装 Visual C+ 6.0的机器上 运 行。而 Debug 版本的 exe 链 接了 调试 版本的 MFC DLL 文件,如 MFC42D.DLL。在 没 有安装 Visual C+6.0的机器上不能 运 行,因 为 缺 MFC42D.DLL
22、等,除非 选择 use static dll when link。 4、 ASSERT 和 VERIFY 有什 么区别 ASSERT 里面的 内 容在 Release 版本中不 编译 , VERIFY 里面的 内 容仍然翻 译 ,但不再判断真 假。所以后者更安全一点。 例如 ASSERT(file.Open(strFileName)。 一旦到了 Release 版本中, 这 一行就忽略了, file 根本就不 Open()了,而且 没 有任何出 错的信息。如果用 VERIFY()就不 会 有 这个问题 。 5、 Workspace 和 Project之 间 是什 么样 的 关 系 每 个 Wo
23、rkspace 可以包括几 个 project,但只有一 个处 于 Active 状态 ,各 个 project之 间可以有依 赖关 系,在 project的 Setting.中可以 设 定,比如那 个 Active 状态 的 project可以依 赖 于其他的提供其函 数调 用的 静态库 。 6、 如何在非 MFC 程序中使用 ClassWizard 在工程目 录 下新建一 个 空的 .RC 文件,然后加入到工程中就可以了。 7、 如何 设 置 断 点 按 F9在 当 前光 标处 增加一 个断 点和取消一 个断 点。 另外,在 编辑状态 下,按 Ctrl+B 组 合 键 , 弹 出 断 点
24、设 置 对话 框。然后 单击 【 Condition】按 钮弹 出 设 置 断 点 条 件的 对话 框 进 行 设 置。 8、 在 编辑状态 下 发现成员变量或函数不能显示提示是如何打开显示功能 这 似乎是目前 这个 Visual C+ 6.0版本的一 个 bug,可按如下步 骤 使其正常,如再出 现 ,可如法炮制: (1) 关闭 Project (2) 删 除“工程名 .ncb”文件 (3) 重新打 开 工程 9、 如何 将 一 个 通 过 ClassWizard 生成的 类彻 底 删 除 首先在工作 区 的 FileView 中 选 中 该类 的 .h 和 .cpp 文件,按 delete
25、 删 除,然后在 文件管理器中 将这两个 文件 删 除,再 运 行 ClassWizard, 这时 出 现 是否移走 该类 的提示, 选择 remove就可以了。 10、 如何 将 再 workspace 中消失的 类 找出 来 打 开该类对应 的 头 文件,然后 将 其 类 名 随 便改一下, 这个时 候工作 区 就 会 出 现 新的 类 ,再将这个类 改回原 来 的名字就可以了。 11、 如何 清 除 所有的 断 点 菜 单 【 Edit】 【 Breakpoints】,打 开 “Breakpoints”对话 框, 单击 【 Remove All】按钮 即可。 快捷 键 是“ Ctrl +
26、 Shift + F8”。 12、 如何再 ClassWizard 中 选择 未列出的信息 打 开 “ClassWizard”对话 框,然后切 换 到“ Class Info”页 面。改 变 “Message filter”,如 选择 “Window”,“ Message”页 面就 会 出 现 Window 的信息。 13、 如何 检测 程序中的括 号 是否匹配 把光 标 移 动 到需要 检测 的括 号 前面,按快捷 键 “Ctrl + ”。如果括 号 匹配正确,光 标 就跳到匹配的括 号处 ,否 则 光 标 不移 动 , 并 且机箱喇叭 还会发 出一 声 警告。 14、 如何 查 看一 个
27、宏 (或 变 量、函 数 )的 定 义 把光 标 移 动 到要 查 看的一 个 宏上,就比如 说 最常 见 的 DECLARE_MAP_MESSAGE 上按一下 F12(或右 键 菜 单 中的相 关 菜 单 ),如果 没 有建立 浏览 文件,就 会 出 现 提示 对话 框,按【确定】按 钮 ,然后就 会 跳到 该 宏 (或 变 量、函 数 )定 义 的地方。 15、 如何添加 Lib 文件到当前工程 单击菜单【 Project】 【 Settings】弹出“ Project Setting”对话框,切换到“ Link”标签页,在“ Object/library modules”处输入 Lib
28、文件名称,不同的 Lib 之间用空格格开。 16、 如何快速删除项目下的 Debug 文件夹中临时文件 在工作区的 FileView 视图中选中对应的项目,单击右键弹出菜单,选择【 Clean(selection only)】菜单即可。 17、 如何快速生成一个现有工程除了工程名外完全相同的新工程。 在新建工程的“ New”对话框中选择“ Custom Appwizard”项,输入新工程的名字,单击【 OK】按钮。出现“ Custom AppWizard”项,输入新工程的名字,单击【 OK】按钮。出现“ Custom AppWizard Step 1 of 2”对话框,选择“ An exist
29、ing Project”项,单击【 Next】按钮。出现“ Custom AppWizard Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【 Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程 AppWizard。 现在就可以项用 MFC AppWizard 一样用这个定制的向导。如果不想用了,可以在 Visual C+ 6.0安装目录下 CommonMSDev98Template 目录中删除该 Wizard 对应的 .awx和 .pdb 文件 。 18、 如何解决 Visual C+ 6.0 不正确连接的问题 情景:明明之间改动了一个文件,却要把整个
30、项目全部重新编译链接一次。刚刚链接好,一运行,有提示重新编译链接一次。 这是因为出现了未来文件 (修改时间和创建时间比系统时间晚 )的缘故。可以这样处理:找到工程文件夹下的 debug 目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“ Rebuild All”一次。 19、 引起 LNK2001的常见错误都有哪些 遇到的 LNK2001错误主要为: unresolved external symbol “ symbol” 如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。 一般来说,发生错误的原因有两个:一时所引用的函数、变量不存在,拼写不正确
31、或者使用错误;其次可能使用了不同版本的链接库。一下是可能产生 LNK2001错误的原因: 由于编码错误导致的 LNK2001错误 (1) 不相匹配的程序代码或模块定义 (.DEF)文件导致 LNK2001。例如,如果在C+源文件了内声明了一变量“ var1”,却视图在另一个文件内以变量“ var1”访问改变量。 (2) 如果使用的内联函数是在 .cpp 文件内定义的,而不是在头文件内定义将导致 LNK2001 错误。 (3) 调用函数是如果所用的参数类型头函数声明是的类型不符将会产生LNK2001 错误。 (4) 视图从基类的构造函数或析构函数中调用虚拟函数时将会导致 LNK2001错误。 (
32、5) 要注意函数和变量的可公用性,只有全局变量、函数时可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外 部方位任何没有在该文件内声明的静态变量时将导致编译错误或 LNK2001错误。 由于编译和联机的设置而造成的 LNK2001错误 (1) 如果编译时使用的时 /NOD(/NODERAULTLIB)选项,程序所需要的运行库和 MFC 时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会北链接进工程文件。这种情况下使用 /NOD 将导致 LNK2001错误 (2) 如果没有为 wWinMainCRTStartup 设定程序入口,在使用 Unicode
33、和 MFC 时讲的到“ unresolved external on _WinMain16”的LNK2001错误信息。 (3) 使用 /MD 选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“ func”的引用,在目标文件里即对“ _imp_func”的引用。如果试图使用静态库 LIBC.LIB 或 LIBCMT.LIB 进行链接,将在 _imp_func 上发生 LNK2001 错误。如果不使用 /MD 选项编译,在使用 MSVCxx.LIB 链接时也会发生 LNK2001错误。 (4) 使用 /ML 选项编译时,如用 LIBCMT.LIB 链接回在 _errno 上发生LN
34、K2001错误。 (5) 当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生 LNK2001 错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。 (6) 不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。 (7) 在不同的模块中使用内联和非内联的编译选项能够导致 LNK2001 错误。如果创建 C+库时打开了函数内联 (/Ob1或 /Ob2),但是在描述该函数的相应头问卷安里却关闭了函数内联 (没有 inline 关键字 ),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用 inline关键字标志为内联函数
35、。 (8) 不正确的 /SUBSYSTEM 或 ENTRY 设置也能导致 LNK2001错误。 20、 如何调试一个没有源码的 exe 文件调用的 dll 在 Visual C+ 6.0 中,进入“ Project Setting”对话框然后选择 Debug 标签页。通 常 Visual Studio 默认“ executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试 Dlls、名字空间扩展、 COM 对象和其他从某些 EXE 以及从第三方的 EXE 中调用的 plug-in程序
36、。 21、 Visual C+ 6.0 工程中的项目文件都表示什么。 .opt:工程关于开发化境的参数文件。如工具条位置等信息。 .aps(AppStudio File)资源辅助文件,二进制格式 ,一般不用去管他。 .clw: ClassWizard 信息文件,实际上是 INI 文件格式,又兴趣可以研究一下。有时候ClassWizard 出了问题,手工修改 CLW 文件可以解决。如果此文件不存在的话,每次用ClassWizard 的时候回提示是否重建。 .dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的或不要手工修改。 .dsw(DevelopStudio
37、 Workspace):是工作区文件,其他特点和 .dsp 差不多。 .plg:是编译信息文件,编译时的 error 和 warning 信息文件 (实际上时一个 html 文件 ),一般用处不大。在单击菜单【 Tool】 【 Option】弹出的对话框里面有个选项可以控制这个文件的生成。 .hpj(Help Project):是生成帮助文件的工程,用 microsoft Help Compiler 可以处理。 .mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,回提示你是否转换成新的 .dsp 格式。 .bsc:是用于浏览项目信息的,
38、如果用 Source Brower 的话旧必须又这个文件。如果不用这个 功能的话,可以在 Project Options 里面去掉 Generate Browse Info File,这样可以加快编译速度。 .map 是执行文件的影像信息记录文件,除非对系统底层,这个文件一般用不着。 .pch(Pre-Compiled File):是与编译文件,可以加快编译速度,但是文件非常大。 .pdb(Program Database),记录了程序有关的一些数据和调试信息,在调试的时候可能有用。 .exp:只有在编译 DLL 的时候才会生成,记录了 DLL 文件的一些信息,一般也没有用。 .ncb:无编译 浏览文件 (no compile browser)。当自动完成功能出问题时可以删除此文件。编译工程后回自动生成。 声明 :以上为 从的 个人 初学时的学习笔记中 整理制作而成 ,有不当之处请自行更正 . UNBUG 2008-5-11 本文档由 A5下载 http:/收集整理,版权归原作者所有。 A5 下载提供海量源码,软件,素材,教程文档下载。 如果您恰好喜欢打篮球,请登录 购买正品低价的斯伯丁篮球