程序调试步骤.docx
- 文档编号:3732084
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:10
- 大小:393.71KB
程序调试步骤.docx
《程序调试步骤.docx》由会员分享,可在线阅读,更多相关《程序调试步骤.docx(10页珍藏版)》请在冰豆网上搜索。
程序调试步骤
调试程序
在编写较长的程序时,能够一次成功而不含有任何错误决非易事,这需要进行长期大量的练习。
编写的程序若已没有编译错误,可以成功运行。
对于程序中的错误,VC提供了易用且有效的调试手段。
对于附录中的简单程序,是对1—10求平均数,但是运行结果为5,需要进行调试找出错误原因,步骤如下:
步骤1:
右击工作栏,选择“调试”出现调试工具栏,如下图:
(1)
Restart(Ctrl+shift+F5):
此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处.这时如果选择StepOver(F10)就可以逐步执行main()函数了.
(2)
StopDebugging(Shift+F5):
此debugger功能将终止(所有)调试,并返回到常规编辑状态.
(3)
Break(此功能常常在遇到调用函数的语句时可见.):
此功能将在调试过程中的debugger当前位置挂起程序的执行,然后就可以在调试状态修改程序的代码,接着可以用ApplyCodeChanges(Alt+F10)来应用修改的代码到正在调试的程序当中.如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入.
(4)
ApplyCodeChanges(Alt+F10):
此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码.如,选择Break功能并修改代码后,只要选择ApplyCodeChanges(Alt+F10)就能将修改后的代码应用到正在调试的程序当中.
(5)
ShowNextStatement(Alt+Num*):
此功能将显示程序代码的下一条语句,如果源代码中找不到,则在Disassembly窗口中显示语句.当在Disassembly窗口中显示时,可以单击
Disassembly返回到源代码窗口.
(6)
StepInto(F11):
此功能可以单步进入到在调试过程中所跟踪的调用函数的语句的函数内部.
(7)
StepOver(F10):
此功能可以单步对所在函数单步调试(跳过函数内部),如果调试的语句是一个调用函数的语句时,Debugger将全速执行所调用的函数,单步(一步)通过所调用的函数,Debugger停该调用语句的下一条语句上.
(8)
StepOut(Shift+F11):
此功能将使Debugger切换回全速执行到被调用函数结束,并停在该函数调用语句的下一条语句上.当确定所调用的函数没有问题时可以用这个功能全速执行被调用函数.
(9)
RuntoCursor(Ctrl+F10):
此功能将全速执行到包含插入点光标所在的行,可以作为在插入点光标处设置常规断点的一种选择.注意,当光标处不是一个有效的执行语句时此功能将不起作用.
(10)
Go(F5):
此功能将全速执行程序直到遇到一个断点或程序结束,或直到程序暂停等待用户输入.注意,此功能最能有效的调试循环,常将断点设置在循环体内,重复的按F5全速执行循环体可以测试循环过程中的产生的变化.
步骤2:
选择StepOver(F10),开始调试程序。
如下图:
步骤3:
按StepOver(或者F11)执行单步运行。
步骤4:
当执行到某个函数后,选择StepInto(F11),进入该函数内部,如下图所示:
(1)执行到函数total();
(2):
选择StepInto,进入函数内部:
步骤5:
当执行到某个函数,然后执行Stepover,则跳过该函数继续往下执行:
(1)执行到函数total();
(2):
执行StepOver,跳过函数total(),执行函数average()。
步骤6:
当进入某个函数后,执行StepOut,则跳出该函数。
(1):
进入函数total()内部:
(2):
执行StepOut,则跳出函数total():
步骤7:
RuntoCursor:
运行至光标所在行暂停。
步骤8:
通过界面下方的窗口,可以查看变量的值,右下方watch窗口可以根据需要,添加额外变量score和stu,以便对比观察。
(1):
赋完初值后score的值如下,分配的内存地址首地址为0x0012ff20:
(2)运行完函数total后sum的值为55:
(3)运行完函数average后av的值为5,从中可以发现是子程序average()中语句“av=sum/n”错误,av被除取整了。
步骤9:
断点运行
(1)设在函数total()第一行和最后一行各设置一个断点,按F9或者点工具栏中的小手,在鼠标光标停留处设置断点,如下图:
(2)选择全速运行(F5),则程序运行到断点处,在watch窗口中发现stu的地址也为0x0012ff20,和原来score的首地址相同,这也说明了在函数调用时,如果传递方式为地址传送,则形参和实参是共用同一个内存地址的,如下图:
(3)再按F5,运行到total函数末尾,则sum的值为55,stu的地址变为0x0012ff48,程序中每个数组元素占4个内存单元,所以每执行一次“stu++”,stu的地址就增加4个单元。
如下图:
步骤10:
选择StopDebugging停止调试。
附录:
#include
inttotal(int*stu,intn);
floataverage(intsum,intn);
voidmain()
{
intscore[10]={1,2,3,4,5,6,7,8,9,10},sum;
floatav;
sum=total(score,10);
av=average(sum,10);
printf("Averageis:
%2f",av);
}
inttotal(int*stu,intn)
{
inti;
floatsum=0;
for(i=0;i { sum+=*stu; stu++; } returnsum; } floataverage(intsum,intn) { floatav; av=sum/n; returnav; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 调试 步骤