范文一:程序调试步骤
一、认识调试功能
在组建(build)菜单中,点击开始调试(start debug),在其下级子菜单中,包含了启动调试器运行的各项子命令(如图1所示)
图1 开始调试菜单
各子命令及其功能如下:
, Go:从程序中的当前语句开始执行,直到遇到断点(后面讲)或遇到程序结
束。
, Step Into:控制程序单步执行,并在遇到函数调用时进入函数内部。
, Run to Cursor:在调试运行程序时,使程序运行到当前光标所在位置时停止,
相当于设置了一个临时断点。
二、单步调试代码
利用图1菜单中的Step into功能或按F11键,进入单步调试状态,有一个箭头指向程序的第一行,每按一次F11键,程序再向前执行一行语句,如图2所示。
图2 开始调试后的界面
我们对图2的界面进行观察。
首先,菜单中增加一个调试(debug)菜单,如图中?处,下面是菜单中的部分功能(鼠标浮到上面时,会有提示,请试一试。)
, Step Into(F11):单步调试程序,遇到调用函数时,进入函数内部逐步执行;
, Step Over(F10):也是单步调试程序,遇到调用函数时,并不进入函数内容执
行;
, Step Out:调试程序时,从正在执行的某个嵌套结构的内部跳到该结构的外部,
常用于知道调用函数中不存在错误的情况;
, Run to Cursor(CTRL-F10):调试程序时,直接运行到插入点处。
其次,和当前正在执行的语句相关的变量,以及其当前的值显示在了?处。
再次,黄色箭头代表了正在执行的位置。
【练习1】
下面,针对求1+2+3+...+100的程序,体验单步执行。步骤:
(1)编写如图所示求1+2+3+...+100的程序,排除编译错误;
(2)按前述开始单步执行,用“Step Into(F11)”持续执行,在执行过程中,注意观察变量的变化。
, 调试中,要将自己的预期和计算机执行的结果进行比较,当发现不一致,恭喜,
问题找到了。
, 本程序循环要执行100次~有的程序进入循环要执行的次数更多,而初步跟
踪确定循环不可能出问题,需要快速“跳出”循环。将光标移到循环后,用“Run
to Cursor”,程序即运行到光标处。
, 在cout<...一行继续f11,会吓人一跳,出现的界面是:>
图3 程序会运行到“看不懂”的代码中去,用Step Out功能退出
这是因为F11的单步运行,进入到了实现cout功能的代码中去了(教训:以后再到这儿,切记用Step Over(F10),而不是Step Into(F11)),此时请用Step Out功能可以退出。
【练习2】再将上面的过程进行几遍,熟练上述过程,学会观察,会灵活使用Step Over(F10)、Step Into(F11)、Step Out和Run to Cursor处理。
提示:Step Over(F10)和Step Into(F11)的区别将在学习函数后更加明确,需要跟踪自定义函数内部代码时,用Step Into(F11),不需要跟踪时,就Over过去了。
【练习3】将光标置于程序中某一语句上,用Run to Cursor(快捷键CTRL-F10),看看发生什么现象——直接执行到了光标处~这是一种快速观察的方法。
三、设置断点和断点应用
断点是程序执行需要中断的地方。可以让程序中断在需要的地方,从而方便其分析。
有两种设置断点的方法,如图4所示:
, 将光标移到需要设置断点的程序行,点击工具栏上的“手型”按钮设置断点。
, 利用鼠标右键设置:在程序行前的空白栏内点鼠标右键,选择菜单中的
Insert/Remove Breakpoints选项可以设置断点。
图4设置断点及相关工具
设置了断点的程序行前会出现一个黑色的实心圆圈。
取消断点用同样的按钮和菜单。
Go(F5)命令从程序中的当前语句开始执行,直到遇到断点(后面讲)或遇到程序结束。
【练习4】在程序中随意设置和取消断点(一个程序中可以根据需要设置多个断点),然后用Go命令(F5)执行,观察变量及程序流程的变化。
技巧:在调试的过程中,可以直接使用Run to Cursor,从而避免多次的用Step Into/Over等命令。如果设置了断点,直接运行程序就可以在断点处停止,从而避免程序员总得关注光标的位置。一个程序中可以设多个断点,这也为程序员提供了方便。
四、用好快捷键和“调试”工具栏
在使用中记住各功能的快捷键,这将提高你的工作效率。快捷键可以从菜单中看到。
可以在工具栏处点右键,选择“调试”工具栏,如图5,工具栏也可以方便你的工作。
图5 调试工具栏
【练习5】将工具栏中的功能都点一点,看一看,想一想,但不求甚解。随着学习的深入,我们会逐步掌握。
五、程序调试方法小结
上面仅介绍了程序调试的基本方法,但灵活运用可以为编写出正确的程序提供强大的支
撑。
随着经验的增加,简短且算法简单的程序你可能凭观察就知一二。对需要观察其运行过程的程序,可以这样做:
, 增加必要的断点(当然,嫌疑解除后去除断点);
, 如果必要,添加监视,以便于观察一些表达式的值;
, 用Step Into、Step Over、Step Out或Run to Cursor等的组合,跟踪程序执
行的过程
, 在运行过程中,和自己对运行结果的预期结合起来,思考程序可能出现的问题。
, 需要退出程序时,使用调试菜单中的“Stop Debugging”选项终止执行。这时再
修改程序。
, 如果程序执行异常,一定要告诉自己:程序中一定有bug,不是机器的错,我
得找出bug来,Bug也一定会被你找出来。
范文二:PLC程序调试步骤
PLC程序调试步骤(原)
圈子类别:PLC (晴天) 2007-3-29 11:24:00
[我要评论] [加入收藏] [加入圈子]
PLC程序调试步骤
人的脑力是有限的,并且记事情也有时间性。过了N天就会忘记每次修改的原因,为什么要加这条指令,为什么要删除这个网络,让自己以后看自己以前编写的程序时都会很困惑。做到以下步骤,对所有程序理解与修改会有很大帮助的。
1、 把原有程序另存一个, 在另存的程序上作修改。文件命名一个主要的程序名称,标注第几次修改,并加上修改的日期,最好是在文件名外加上简要的修改标题。例如: 《 捆扎程序5(06.10.23翻板步进电机加条件) 》
2、 用.doc文件记录修改的年月日。
3、 在日期下面记录修改程序的步骤,增加或是删除了哪些指令等。并在程序的编辑条注释中做记录,以备下次修改。
4、 在.doc文件中详细记录修改程序的原因,所出现的故障现象是什么,故障是如何排除的。 5、 在.doc文件中标注修改后所现用的程序全名,包括日期与简要的修改标题。 6、 把过时与现用的程序用,过时文件夹与现用文件夹分开整理,按日期排列。
这样每次所作的修改就有了详细的档案,便于以后的程序修改。现用的程序是标有最近日期的程序。 这样的工作步骤同时也适用于电气图纸的修改。
范文三:ATC程序调试步骤
ATC程序调试步骤
准备工作:
A 获取程序LICENSE
B 用ICI03或ICI12连接COMPOSER,不能用CPM访问。
LICENSE输入:
A在程序C PROGRAM BLOCKS中根据LICENSE中的相关信息输入。对于KEY号码大于65536且为奇数的情况,可采用如下方法解决。
B 核对主从控制器和LICENSE中所写是否一致。
程序内容检查:
A核对Miscellaneous中LOOP、PCU、MODULE和实际是否一致,对于TIME UNTIL ROTOR
,而实际运行则需设为60。 STRESS OUPUTS BECOME VALID,如果是仿真状态可设置为2
B检查Process Data Starting Block 开始模块地址的初始参数是否设置全,否则程序计算不出结果。
程序下装:
1. 置控制器为Configure MODE.
2. 选择要下装程序的控制器,右键点击properties,弹出如下画面,选择ROTOR.CSP程序,点击
format,结束后会弹出提示框。
3 选择要下装程序的控制器,点击如下所示view files
之后右键点击空白处,选择LOAD C,依次选择我们准备好的三个文件:rotor.map、
rotor.lms、rotor.csp.程序下装成功会弹出提示框。
4 COMPILE控制器,下装,excute。程序下装成功。
范文四:程序调试步骤
例1. 1的调试:
1、Free Pascal程序的启动
双击桌面上的Free Pascal,启动后,界面如下:
2、第一次启动free pascal 时,用鼠标单击菜单不起作用,需用要进行设置。右击标题栏,选择属性:
3、在属性窗口中,去掉2个快速编辑模式和插入模式前的复选框的勾,再单击确定按纽,新弹出:将属性应用于快捷的设置,在该面板中选择:修改启动该窗口的快捷方式。设置好了,关闭free pascal窗口。再重新单击桌面上的free pascal,这时就可以用鼠标来操作了。
4、新建一程序文件:单击菜单File ,选择new
5、输入代码,这里的writeln 是writeLn ,大小写不要紧。Writeln()后面接的是一对括号。
6、保存。按F2,或单击file/save,弹出一保存窗口。将文件保存为ex11.pas 。该文件存储在free pascal的安装目录下:C:\FPC\2.0.4\bin\i386-win32
7、编译运行,按Ctrl+F9,编译后,再Alt+F5查看屏幕输出结果。
例1.2调试:
1、新建一程序文件:单击菜单File ,选择
new
2、以书本例1.2为例,在新建的窗口中输入如下代码:
3、代码写完后,单击file / save (或按F2) ,保存文件,存储为ex12.pas ,该文件存储在free pascal的安装目录下:
C:\FPC\2.0.4\bin\i386-win32
4、编译程序。按Ctrl+F9,弹出如下窗口:
在此窗口中输入a 的值,比如输入5,输完后,敲回车键,回到程序窗口,再按Alt+F5,在屏幕上查看输出结果。
得到输出的结果值,再按回车健Enter ,回到主程序界面。
范文五:程序调试步骤
调试程序
在编写较长的程序时,能够一次成功而不含有任何错误决非易事,这需要进行长期大量的练习。编写的程序若已没有编译错误,可以成功运行。对于程序中的错误,VC 提供了易用且有效的调试手段。
对于附录中的简单程序,是对1—10求平均数,但是运行结果为5,需要进行调试找出错误原因,步骤如下:
步骤1:右击工作栏,选择“调试”出现调试工具栏,如下图:
(1)Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处.这时如果选择Step Over(F10)就可以逐步执行main()函数了.
(2)Stop Debugging(Shift+F5):此debugger功能将终止(所有)调试,并返回到常规编辑状态.
(3)Break(此功能常常在遇到调用函数的语句时可见.):此功能将在调试过程中的debugger当前位置挂起程序的执行,然后就可以在调试状态修改程序的代码,接着可以用Apply Code Changes(Alt+F10)来应用修改的代码到正在调试的程序当中.如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入.
(4)Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码.如,选择Break功能并修改代码后,只要选择Apply Code Changes(Alt+F10)就能将修改后的代码应用到正在调试的程序当中.
(5)Show Next Statement(Alt+Num*):此功能将显示程序代码的下一条语句,如果源代码中找不到,则在Disassembly窗口中显示语句.当在Disassembly窗口中显示时,可以单击Disassembly 返回到源代码窗口.
(6)Step Into(F11):此功能可以单步进入到在调试过程中所跟踪的调用函数的语句的函数内部.
(7)Step Over(F10):此功能可以单步对所在函数单步调试(跳过函数内部),如果调试的语句是一个调用函数的语句时, Debugger将全速执行所调用的函数,单步(一步)通过所调用的函数,Debugger停该调用语句的下一条语句上.
(8)Step Out(Shift+F11):此功能将使Debugger切换回全速执行到被调用函数结束,并停在该函数调用语句的下一条语句上.当确定所调用的函数没有问题时可以用这个功能全速执行被调用函数.
(9)Run to Cursor(Ctrl+F10):此功能将全速执行到包含插入点光标所在的行,可以作为在插入点光标处设置常规断点的一种选择.注意,当光标处不是一个有效的执行语句时此功能将不起作用.
(10)Go(F5):此功能将全速执行程序直到遇到一个断点或程序结束,或直到程序暂停等待用户输入.注意,此功能最能有效的调试循环,常将断点设置在循环体内,重复的按F5全速执行循环体可以测试循环过程中的产生的变化.
步骤2:选择Step Over(F10),开始调试程序。如下图:
步骤3:按Step Over(或者F11)执行单步运行。
步骤4:当执行到某个函数后,选择Step Into(F11),进入该函数内部,如下图所示:
(1)执行到函数total();
(2):选择Step Into,进入函数内部:
步骤5:当执行到某个函数,然后执行Step over,则跳过该函数继续往下执行:
(1) 执行到函数total ();
(2):执行Step Over,跳过函数total(),执行函数average()。
步骤6:当进入某个函数后,执行Step Out,则跳出该函数。
(1): 进入函数total()内部:
(2): 执行Step Out,则跳出函数total():
步骤7:Run to Cursor :运行至光标所在行暂停。
步骤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:选择Stop Debugging 停止调试。
附录:
#include int total(int *stu,int n); float average(int sum,int n); void main() { int score[10]={1,2,3,4,5,6,7,8,9,10},sum; float av; sum=total(score,10); av=average(sum,10); printf("Average is:%2f",av); } int total(int *stu,int n) { int i; float sum=0; for(i=0;i<> { sum+=*stu; stu++; } return sum; } float average(int sum,int n) { float av; av=sum/n; return av; }