系统开发-SDB的启动_第1页
系统开发-SDB的启动_第2页
系统开发-SDB的启动_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、UNIX系统开发sdb的启动首先来看看在哪些情况下需要对程序进行调试。第一种情况(这是大多数用户都会碰到的),程序在运行过程中忽然跳了出来,屏幕上显示一个xxxxcore dumped消息,然后Shell提示符就又显示出来了,其中xxxx表示出错原因。这种情况的出现一般是系统核心认为进程的执行出现了异常,如进程试图去访问一块不允许它访问的存储区域(Memory Fault,Segmentation Fault);或者扫描某个无终止符的字符串(Bus Error);或者浮点运算溢出或被0除(Arithmetic Exception),等等。此时操作系统会把进程当时的内存映象写到当前目录下的一个名

2、叫core的文件中。这种情况下我们可以使用sdb来检查此core文件,以决定出错的地点以及程序执行的状态,如函数间的调用关系、变量的值,等等。第二种情况,程序可能并没有什么异常行为,但就是怎么也得不到正确的输出结果。这时需要在该进程运行过程中对之进行调试。这种情况下我们可以使用sdb逐条语句地跟踪程序的执行过程,并在执行过程中检查有关变量的值的变化情况。上述两种情况并不是绝然分开的。实际上它们可以结合在一起使用。例如,当我们利用core文件对某个已终止的进程进行调试时,可以在sdb中重新启动相应程序的运行,然后对语句的执行进行一些控制。这样我们就能够知道在出现异常之前哪个程序到底是如何动作的。

3、为了使sdb能够很好地对程序进行调试,在编译程序时应指示编译程序和链接程序在目标代码中加入调试用的各种信息,如程序中的变量名、函数名及其在源程序中的行号等。我们知道,使用-g选项可以完成这一点。如我们可以用如下命令编译前一章给出的有毛病的程序代码:$ cc -o myprog myprog.c myfunc.cmyprog.c:myfunc.c:$ ls -l myprog-rwx-xr-x 1 yxz users 4224 Sep 1 10:17 myprog$ cc -g -o myprog myprog.c myfunc.cmyprog.cmyfunc.c$ ls -l myprogto

4、tal 26-rwxr-xr-x 1 yxz users 5404 Sep 1 10:21 myprog$这时我们会发现,新生成的myprog比不带-g 选项生成的myprog要大的多。故在程序调试完成之后应将可执行程序中的调试用信息去掉。最简单的方法当然是使用不带-g 选项的cc命令重新编译一遍。另外UNIX系统提供了另外一个名为strip的工具,使用此命令也可以将程序中的调试信息去掉。现在我们可以试着运行一下那个有问题的程序myprog。在shell提示符下输入:$ myprog 1 111Arithmetic Exception -core dumped$我们看到,程序由于异常而推出了,

5、并且在当前目录下将生成一个名为core 的文件。这个文件有时非常庞大。在文件系统的维护中,有一条就是要定期找出各目录下的core 文件并将其删除掉。发生此种情况时可以使用sdb来对之进行调试。输入:$ sdb myprog即可进入sdb调试程序。sdb将接受三个参数:待调试的可执行文件名;待调试的core文件名,一般缺省是core;由冒号分隔的一个目录表,sdb将在这些目录表中去查找有关的源文件。此目录表的缺省设置是当前目录有时当前目录下的core文件可能并不是待调试的程序的core 文件,此时用这个core 文件进行调试就是不合适的了。为防止这一点,可在命令行中指定第二个参数为减号(),如下

6、所示:$ sdb myprog -这里的-告诉sdb忽略当前目录下的core文件。第三种情况,我们试用对活动过程(正在运行的进程)进行调试的情况。例如,假定某个程序正在后台运行,但我们注意到该程序的某些部分执行起来非常慢,这时我们可以在不杀死这个进程的情况下对之进行调试:$ sdb /proc/1111这里1111为待调试进程的进程号,用户可以用PS命令得到。系统在/proc目录下用文件的形式保存了每一个活动进程的信息,而文件名正好就是相应的进程号。指定的进程将在执行时遇到第一个系统调用或调用sdb后收到某个软中断信号时暂停其运行,我们就可以在sdb中检查变量的值、设置断点、恢复执行,等等。在退出sdb时,控制又返回程序,执行进程又从其原停止的地方继续执行。第四种情况,一般情况下当被调试的活动进程在收到某个软中断信号时sdb会停止该进程。为了防止这一点,可以使用-s 选项。例如:$ sdb -s 14 myprog将告诉sdb不要因为软中断信号14(闹钟报警信号)而使进程的执行停止。此时该信号被传给相应进程。在程序接收并处理多个软中断信号的情况下,可以使用多个-s选项。在sdb命令行中还有其他一些选

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论