UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc

上传人:b****1 文档编号:13162555 上传时间:2022-10-07 格式:DOC 页数:4 大小:38KB
下载 相关 举报
UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc_第1页
第1页 / 共4页
UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc_第2页
第2页 / 共4页
UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc_第3页
第3页 / 共4页
UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc

《UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc(4页珍藏版)》请在冰豆网上搜索。

UNIX系统开发sdb命令使用程序执行控制Word格式文档下载.doc

如果直接输入:

*b

命令,则可将当前行设成是一个断点。

但是若当前行不是一个可执行语句,那么sdb将把当前行之后的第一个可执行语句处设置一个断点。

在设置完断点之后,为了解程序中设置有哪些断点,可以使用B命令:

*B

0x80483f0myprog.c:

10main+0x8

0x80483f7myprog.c:

11main+0xf

0x8048407myprog.c:

12main+0xlf

0x8048440myprog.c:

9TestInput

0x8048447myprog.c:

10TestInput+0x7

0x804482myprog.c:

13TestInput+0x42

在设置完断点之后要将其删除,可以使用d命令。

如:

d

sdb将把在main()函数中设置的第一个可执行行上的断点删除。

如果直接使用d命令,sdb将逐个列出所有断点并询问用户是否删除之。

回答y断点将被删除。

使用D命令则可删除程序中设置的所有断点。

2.sdb中启动程序的运行

在设置好所需的断点之后我们就可以重新启动程序的运行了。

这可以使用r命令。

*r1112

BREAKPOINTprocess554functionmain()inmyprog.c

10:

for(i=1;

i<

argc:

i++)

*

sdb将在main()函数中设置第一个断点处停下来并显示该行的语句。

r后面给出的是传给可执行程序myprog的两个参数。

因此上述命令同在shell提示符下输入:

$myrprog1112

是相同的。

不同的只是在sdb中程序的执行会在断点处停下来。

如果只输入

*r

命令,sdb使用最近一次执行调试程序时给它提供的参数来启动之。

如果想不带任何参数来重新启动程序的运行,可使用

*R

命令。

3.控制程序的单步或者连续执行

在用r(R)命令启动程序的运行之后,sdb将在第一个断点处暂停程序的运行。

此时断点行成为当前行,但并未被执行。

此时我们可以在sdb的星号(*)提示符下输入前面已介绍过的或后面将要介绍的各种命令。

当然最重要的是显示那些关键变量的值,以了解程序的运行情况。

在这之后便可以继续程序的执行。

继续执行有两种方式。

的一种是单步方式,即逐条语句执行。

这可以使用S命令完成:

*s

STEPPEDprocess584functionmain()inmyprog.c

14:

printf("

The%dthvalue'

%s'

\tisBAD!

\n"

i,argv[i]);

sdb在执行完当前语句之后,将当前行后移一行并显示出其代码。

对于用户自定义的函数调用,S命令并不将其当成是一条语句,此时它将指示sdb进入该函数(使之成为当前函数)。

如我们可以接着上面输入下列命令:

11:

if(TestInput(argv[i])==TESTOK)

BREAKPOINTprocess594functionmain()inmyprog.c

if(TestInput(argv[i])==TESTOK)

BREAKPOINTprocess584functionTestInput()inmyfunc.c

9:

{while(*ValueInput)}

也能让sdb将用户自定义的函数调用,当成是一条普通语句而不进入此函数的定义。

此时可以在那些包含有用户自定义函数调用的行,使用S命令以执行之。

s和S命令都可以接收一个指明待执行的语句数目的参数。

例如:

*s2

使sdb执行当前行及其下那行语句,然后当前行之下的第2行将成为新的当前行。

注意当使用s或S时,如果sdb遇上一个未加-g选项编译的用户自定义函数,那么执行将继续直到一个带-g选项编译的函数为止。

控制程序执行的第二种是使用c或C命令。

一个最简单的c命令将使sdb从当前行把程序执行到下一个断点处。

在c命令中还可以临时设置“断点”。

*8c

将使sdb在第8行上设置一个断点并使程序从当前行执行至该断点处后停下来,然后将此断点自动删除并等待用户输入其他命令。

在c命令中还可以指定在继续执行时后面第几个断点处停下来。

*c2

将使sdb从当前行开始执行,直到当前行之后的第2个断点为止。

一般的:

*c

命令实际上相当于:

*c1

C命令的作用及用法同c基本上是相同的。

只不过此时sdb将进程收到的终止信号传给该进程进行处理。

这对于调试有软中断处理的进程是很有用的。

但sdb并不是将进程所收到的所有信号都传送给进程进行处理。

要传递的信号可在sdb的命令行中用-s选项指定。

我们可以用g命令来告诉sdb在给定的行开始继续程序的执行:

*6g

此命令使sdb在当前文件的第6行处恢复执行。

而:

*6g2

使sdb在当前文件的第6行恢复执行并跳过两个断点。

但在使用g命令时必须小心。

如果此命令跳过了那些必须得初始化语句,或者进程的执行被恢复到某个并不终止进程的函数中,此时都将会是程序的执行出现人为的差错。

一般而言,除非能够确信所跳过的代码段是不正确的代码,不要轻易使用g命令。

4关联命令

我们可以告诉sdb在使用到某种情况下暂停下来,完成某些操作之后继续执行。

*7bt;

i/;

c

将使得sdb在当前文件的第7行设置一个断点,然后每当遇到该断点时都显示函数调用栈(t)、变量i的值(i/),并继续程序的执行(c)。

上述命令的一种变化形式是a(Announce命令)。

*FunctionName:

a

将使得sdb在程序执行过程中每当函数FunctionName被调用时即显示其函数名和参数值。

而命令:

*FunctionName:

6a

将使得sdb在函数FunctionName中的第6行每次被执行时都将其显示出来。

5.函数调用

sdb能够调用程序中用户自定义的任何函数。

这种功能对于下面两种情况可能比较有用:

在需要用各种不同的参数对函数进行测试。

用用户自己定义的一个函数来显示程序中的某些数据。

不论是何种情况,我们均可以用如下命令来进行函数调用:

*FunctionName(Arg1,Arg2,....)

*FunctionName(Arg1,Arg2,....)/m

在第一种用法下,sdb只是简单地执行指定的函数。

在第二种用法下,sdb将在执行指定的函数之后显示返回值。

此值一般将按十进制方式显示,除非指定了另外的显示格式。

提供给函数的参数可以是寄存器名、整数、浮点数、字符、字符串常量或是其他局部当前函数,或者是当前函数可以访问的变量。

6.变量的监视

sdb提供了一种被成为“观察点”(Watch)的机制。

借此机制,我们可以监视变量值得变化或某些地址的内容的变化。

*i$m

可用于设置对某个变量的观察点。

此处变量i为被监视的变量。

而用:

*0x00400000:

m

则可将地址0x00400000处设置成观察点,而0x00400000将成为被监视的地址。

在设置了观察点之后,sdb会同处理S命令一样开始程序的单步执行,并在变量的值或指定地址单元的内容被改变时停止程序的执行。

由于变量值的改变或地址内容的变化,或者其他什么原因而使程序的执行中止,包括因为遇到断点而使程序停止的情形,都将使得所设置的观察点被sdb自动删掉。

被观察的变量必须是当前函数的局部变量或者是当前函数所能够访问的变量

其他命令

除了上面介绍的五类主要命令之外,sdb还支持其他一些命令。

使用这些命令,可以完成其他一些辅助性的工作。

分别介绍如下。

.!

ShellCommand

此命令可以使sdb去执行指定的ShellCommand。

这里ShellCommand是一个合法命令。

例如可以输入:

*!

ls-l

sdb将执行指定的ls-l命令,并将其输出显示出来。

使用:

sh

能够生成一个新的Shell进程。

在此新的Shell中可以完成某些工作,然后用exit命令返回到sdb中。

<

FileName

指示sdb从文件FileName中读取sdb调试命令,并且逐个执行之。

"

SomeString

指示sdb显示出某个字符串。

常用此命令给出某些提示信息,

k

此命令将使当前对程序的调试终止,之后仍可用r命令重新启动被调试的程序。

*k

1111:

killed

这里1111是被调试进程的进程号。

*q

此命令将使sdb停止其自身的运行而返回至原Shell提示符下。

在调试完程序之后一般都要使用此命令。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1