



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、UNIX系统开发sdb命令使用:程序执行控制我们说程序调试的主要目的是观察变量的变化情况。但如果程序就一直不停地运行直至它终止或出错时才停下来的话,将没有机会去观察任何变量。因此,如何有效地控制程序中各语句的执行,使之在适当的时候暂停下来,待调试人员在显示或设置了某些存储单元的值之后再从停下的地方继续执行下去,是调试程序应具有的一项基本功能。在这一节中我们就来具体介绍如何控制程序的运行。 对程序执行控制的第一个问题是设置断点。一个断点实际上就是程序中某行语句。当程序执行到这条语句时控制会重复返回到sdb,由此提供给用户进行其他操作,如显示变量值的机会。1.断点的设置和删除在sdb中设置断点的方
2、法比较多。但基本是b命令的变种。例如,我们可以使用如下语句在main()函数的第一个可执行行(非变量定义这类语句)设置一个断点:* main:b也可以直接用行号来设置断点。例如,在myprog.c中,第10行是main()函数中的第一个可执行语句,则使用如下命令也能达到同样的效果:* 10b注意这是在myprog.c为当前文件的情况下进行的。如果直接输入:* b命令,则可将当前行设成是一个断点。但是若当前行不是一个可执行语句,那么sdb将把当前行之后的第一个可执行语句处设置一个断点。在设置完断点之后,为了解程序中设置有哪些断点,可以使用B命令:* B0x80483f0 myprog.c:10
3、main+0x80x80483f7 myprog.c:11 main+0xf0x8048407 myprog.c:12 main+0xlf0x8048440 myprog.c:9 TestInput0x8048447 myprog.c:10 TestInput+ 0x70x804482 myprog.c:13 TestInput+ 0x42在设置完断点之后要将其删除,可以使用d命令。如:* main:dsdb将把在main()函数中设置的第一个可执行行上的断点删除。如果直接使用d命令,sdb将逐个列出所有断点并询问用户是否删除之。回答y断点将被删除。使用D命令则可删除程序中设置的所有断点。2.
4、sdb中启动程序的运行在设置好所需的断点之后我们就可以重新启动程序的运行了。这可以使用r命令。如:* r 111 2BREAKPOINT process 554 function main() in myprog.c10: for(i=1;iargc:i+)*sdb将在main()函数中设置第一个断点处停下来并显示该行的语句。r后面给出的是传给可执行程序myprog的两个参数。因此上述命令同在shell提示符下输入:$ myrprog 111 2是相同的。不同的只是在sdb中程序的执行会在断点处停下来。如果只输入* r 命令,sdb使用最近一次执行调试程序时给它提供的参数来启动之。如果想不带任
5、何参数来重新启动程序的运行,可使用* R命令。3.控制程序的单步或者连续执行在用r(R)命令启动程序的运行之后,sdb将在第一个断点处暂停程序的运行。此时断点行成为当前行,但并未被执行。此时我们可以在sdb的星号(*)提示符下输入前面已介绍过的或后面将要介绍的各种命令。当然最重要的是显示那些关键变量的值,以了解程序的运行情况。在这之后便可以继续程序的执行。继续执行有两种方式。的一种是单步方式,即逐条语句执行。这可以使用S命令完成:* sSTEPPED process 584 function main() in myprog.c14: printf(The %dth value %s tis
6、BAD!n,i,argvi);*sdb在执行完当前语句之后,将当前行后移一行并显示出其代码。对于用户自定义的函数调用,S命令并不将其当成是一条语句,此时它将指示sdb进入该函数(使之成为当前函数)。如我们可以接着上面输入下列命令:* sSTEPPED process 584 function main() in myprog.c11: if(TestInput(argvi)= TESTOK)* sBREAKPOINT process 594 function main() in myprog.c11: if(TestInput(argvi)=TESTOK)* sBREAKPOINT proce
7、ss 584 function TestInput() in myfunc.c9: while (* ValueInput)* s也能让sdb将用户自定义的函数调用,当成是一条普通语句而不进入此函数的定义。此时可以在那些包含有用户自定义函数调用的行,使用S命令以执行之。s 和S命令都可以接收一个指明待执行的语句数目的参数。例如:* s 2使sdb执行当前行及其下那行语句,然后当前行之下的第2行将成为新的当前行。注意当使用s 或S时,如果sdb遇上一个未加-g选项编译的用户自定义函数,那么执行将继续直到一个带-g 选项编译的函数为止。控制程序执行的第二种是使用c或C命令。一个最简单的c命令将使s
8、db从当前行把程序执行到下一个断点处。在c命令中还可以临时设置“断点”。例如:* 8c将使sdb在第8行上设置一个断点并使程序从当前行执行至该断点处后停下来,然后将此断点自动删除并等待用户输入其他命令。在c命令中还可以指定在继续执行时后面第几个断点处停下来。例如:* c 2将使sdb从当前行开始执行,直到当前行之后的第2个断点为止。一般的:* c命令实际上相当于:* c 1C命令的作用及用法同c基本上是相同的。只不过此时sdb将进程收到的终止信号传给该进程进行处理。这对于调试有软中断处理的进程是很有用的。但sdb并不是将进程所收到的所有信号都传送给进程进行处理。要传递的信号可在sdb的命令行中
9、用-s选项指定。我们可以用g命令来告诉sdb在给定的行开始继续程序的执行:* 6g此命令使sdb在当前文件的第6行处恢复执行。而:* 6g2使sdb在当前文件的第6行恢复执行并跳过两个断点。但在使用g命令时必须小心。如果此命令跳过了那些必须得初始化语句,或者进程的执行被恢复到某个并不终止进程的函数中,此时都将会是程序的执行出现人为的差错。一般而言,除非能够确信所跳过的代码段是不正确的代码,不要轻易使用g命令。4 关联命令我们可以告诉sdb在使用到某种情况下暂停下来,完成某些操作之后继续执行。例如:* 7b t; i/;c将使得sdb在当前文件的第7行设置一个断点,然后每当遇到该断点时都显示函数
10、调用栈(t)、变量i的值(i/),并继续程序的执行(c)。上述命令的一种变化形式是a(Announce命令)。例如:* FunctionName:a将使得sdb在程序执行过程中每当函数FunctionName被调用时即显示其函数名和参数值。而命令:* FunctionName:6a将使得sdb在函数FunctionName中的第6行每次被执行时都将其显示出来。5.函数调用sdb能够调用程序中用户自定义的任何函数。这种功能对于下面两种情况可能比较有用:在需要用各种不同的参数对函数进行测试。用用户自己定义的一个函数来显示程序中的某些数据。不论是何种情况,我们均可以用如下命令来进行函数调用:* Fu
11、nctionName(Arg1,Arg2,.)或* FunctionName(Arg1,Arg2,.)/m在第一种用法下,sdb只是简单地执行指定的函数。在第二种用法下,sdb将在执行指定的函数之后显示返回值。此值一般将按十进制方式显示,除非指定了另外的显示格式。提供给函数的参数可以是寄存器名、整数、浮点数、字符、字符串常量或是其他局部当前函数,或者是当前函数可以访问的变量。6.变量的监视sdb提供了一种被成为“观察点”(Watch)的机制。借此机制,我们可以监视变量值得变化或某些地址的内容的变化。例如:* i $m可用于设置对某个变量的观察点。此处变量i为被监视的变量。而用:* 0x0040
12、0000:m则可将地址0x00400000 处设置成观察点,而0x00400000将成为被监视的地址。在设置了观察点之后,sdb会同处理S命令一样开始程序的单步执行,并在变量的值或指定地址单元的内容被改变时停止程序的执行。由于变量值的改变或地址内容的变化,或者其他什么原因而使程序的执行中止,包括因为遇到断点而使程序停止的情形,都将使得所设置的观察点被sdb自动删掉。被观察的变量必须是当前函数的局部变量或者是当前函数所能够访问的变量其他命令除了上面介绍的五类主要命令之外,sdb还支持其他一些命令。使用这些命令,可以完成其他一些辅助性的工作。分别介绍如下。. !Shell Command此命令可以使sdb去执行指定的Shell Command。这里Shell Command是一个合法命令。例如可以输入:* ! ls -lsdb将执行指定的ls -l 命令,并将其输出显示出来。使用:* ! sh能够生成一个新的Shell进程。在此新的Shell中可以完成某些工作,然后用exit命令返回到sdb中。FileName
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一般定金合同范本
- 中海公寓购房合同范本
- 公司多人转让合同范本
- 第四单元 第三课 拍摄学校创意短视频教学设计 2024-2025学年西交大版(2024)初中信息技术七年级上册
- 2025年高温合金粉末项目建议书
- 2025年环氧脂肪酸甲酯项目申请报告模范
- 机场整改报告范文
- 2025年胺类项目规划申请报告模式
- 换热器仿真报告范文
- 环境见习报告范文
- 地理-天一大联考2025届高三四省联考(陕晋青宁)试题和解析
- 小巴掌童话课件
- 教科版六年级科学下册全册教学设计教案
- 部编版小学五年级下册《道德与法治》全册教案含教学计划
- 运动会活动流程中的医疗安全保障措施
- 2025公司员工试用期合同(范本)
- 第十章皮肤软组织扩张术医学美容教研室袁晓野讲解
- 2025年冷链物流产品配送及仓储管理承包合同3篇
- 2024年青岛远洋船员职业学院高职单招语文历年参考题库含答案解析
- 2024-2025学年成都高新区七上数学期末考试试卷【含答案】
- 浙教版2023小学信息技术六年级上册《人机对话的实现》说课稿及反思
评论
0/150
提交评论