欢迎来到天天文库
浏览记录
ID:19821029
大小:27.50 KB
页数:7页
时间:2018-10-06
《程序调试方法入门》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、程序调试方法入门VC调试方法0.编译看看有无语法错误1.格式化一段乱七八糟的源代码选中那段源代码,按ATL+F8。2.检测程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。(编译会显示语法错:unexpectedendoffilefound)3.分部调试方法程序编译后没有发现语法错误,但运行结果不正确,可以通过分部调试方法确定程序逻辑错误。具体方法有:3.0结
2、束调试:在开发环境下按快捷键“ShiftF5”,或选择”Build”→”StopDebugging”3.1运行到光标处:将光标定位于某一行(比如定位于第一个循环体的第1行,以判断程序是否按所希望的流程开始执行循环),选择”Build”→”StartDebug”→”RuntoCursor”,或直接按快捷键“CtrlF10”,或点击指向大括号的图标,观察状态栏的调试信息3.2单步调试:选择”Build”→”StartDebug”→”StepInto”,或直接按快捷键“F11”,或点击进入大括号的图标,进入单步跟踪,继续按“F11”
3、,边按边观察状态栏的调试信息(这种方式,遇到函数调用,程序会跟踪至被调函数的内部)选择”Build”→”StartDebug”→”StepOut”,或直接按快捷键“ShiftF11”,或点击跳出大括号的图标,程序会从当前被调函数跳出,回到主调函数选择”Build”→”StartDebug”→”StepOver”,或直接按快捷键“F10”,或点击跨越大括号的图标,边按边观察状态栏的调试信息(这种方式,遇到函数调用,程序不会跟踪至被调函数的内部)3.3设置断点:(断点是调试器设置的一个代码位置,当程序运行到断点时,会中断执行,以便
4、对程序进行在线调试。)将光标定位于某一行,直接按快捷键“F9”,或点击小手图标,即可在此行设置断点。选择”Build”→”StartDebug”→”Go”,或直接按快捷键“F5”,或点击”开始调试”图标,程序会运行到断点处,观察状态栏的调试信息如果正常,可以在下方某一行再设置一个断点,按“F5”,程序会运行到下一个断点处,观察状态栏的调试信息将光标定位于断点所在的行,直接按快捷键“F9”,或点击小手图标,即可将此行设置的断点取消。也可以在Breakpoints对话框(在Edit菜单中选择,或直接按快捷键“AltF9”或“Ctr
5、lB”弹出)中一次性取消所有断点。数据断点:数据断点只能在Breakpoints对话框中设置。选择“Data”页,就显示了设置数据断点的对话框。在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成,例如:在编辑框中输入g_bFlag这个全局变量的名字,那么当程序中有g_bFlag=!g_bFlag时,程序就将停在这个语句处。4.调试过程中观察变量、表达式和内存的值当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。Debug工具条上的Varible
6、s按钮可弹出一个框,显示所有当前执行上下文中可见的变量的值。特别是当前指令涉及的变量,以红色显示。VC提供一种被成为Watch的机制来观看变量和表达式的值。在断点状态下,在变量上单击右键,选择QuickWatch,就弹出一个对话框,显示这个变量的值。单击Debug工具条上的Watch按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。注意:这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值
7、,导致软件的逻辑被破坏。由于指针指向的数组,Watch只能显示第一个元素的值。为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。在Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。5.其他调试手段系统还提供一系列特殊的函数或者宏来辅助调试,如下:ASSERT:它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。(生成的release版中
8、不起作用,因为VC在release版中定义了NDEBUG宏。在”Build”→”SetActiveConfiguration”里可设置选择生成Release版或Debug版。Release版的main函数中return0前加上system(“pause”);否则输出结果一闪而
此文档下载收益归作者所有