UNIX系统管理:sdb命令使用-源程序的显示和搜索

sdb命令的使用

同我们前面介绍过的mail,ftp一类工具类似,sdb也是一个命令解释程序。也就是说,用户在sdb提示符(一个星号*)下输入sdb能够识别的命令,sdb将根据被调试的程序的具体情况给出响应。

例如,在运行myprog出错,生成core文件之后进入sdb时,sdb将给出如下的响应:

$ sdb myprog

12: return ((100/atoi(ValueInput))? TESTOK:! TESTOK);

*

sdb给出来的实际上是程序出错所在的函数,在源程序文件中的行号以及出错那一行的语句。

在sdb的使用中要注意三个“当前”概念:

(1)当前文件 即当前将要被执行的语句所在的那个源程序文件

(2)当前函数 即当前将要被执行的语句所在的那个函数

(3)当前行 这个概念只有在编译时加入-g选项才会有,它指的是将要被执行的那条语句。与当前行相应,有一个行号的概念。它指的是每条语句在程序中位于第几行。注意行号是从文件头开始计算的,第一行的行号为1,空白行和注释也包括在内。

在用core文件进行调试时,当前行和当前函数分别被设成是程序出错时所执行的那条语句所在地行和函数(如同上面显示出来的那样)。但如果在编译时未加-g选项,显示出来的将只有函数名和函数的地址了。

在对活动进程进行排错时,sdb将把当前函数和当前行分别设成是main()函数和main()函数的第一个可执行的语句行。

不论是哪种情况,sdb都将显示出*提示符。在此提示符之下我们可以输入各种sdb命令,以控制程序的执行或观察变量的变化情况,等等。在下面的几个小节中我们将分别详细讨论这些问题。

源程序的显示和搜索

程序出错一般来说不只是出错的那条语句本身造成的。事实上出现错误经常是前面或相关的代码执行了不正确的操作或少了某些必要的处理。因此调试过程中经常要观察一下源程序中的语句,或者在程序中搜索某个符号出现在什么地方。其中字符串的搜索功能同vi基本上是相同的,而文件的显示则同另外一个我们没有具体讨论的编辑器ed类似。下面我们将具体介绍这些命令。

1.源程序的显示

在用core进入sdb之后,在*提示符后输入w命令,该命令指示sdb显示源程序中的当前行为中心的前后10行的内容并保持当前行不变:

* w

7:int

8: TestInput(char * ValueInput)

9: {while ( * ValueInput)

10: if (! isdigit( * ValueInput)) return (! TESTOK);

11: else     ValueInput++;

12: return ((100/atoi(ValueInput))? TESTOK:! TESTOK);

13: }

*

我们看到,在进入sdb时,当前行是第12行,以该行为中心的10行内容正好就是上面所显示出来的。其他可以显示源程序语句的sdb命令如下:

P 显示当前行

l 显示对应于当前指令的那条语句

Z 显示当前行开始的下面10条语句

Ctrl+D 显示当前行之后(不包括当前行)的第10条语句

n 显示第n条语句,这里n是一个数

注意这些命令显示出的是源程序语句还是汇编语句(后面我们将要介绍)取决于最近一次显示出的是什么。

2.改变当前行

在用户显示语句时,当前行也会相应地发生变化。例如,Z命令将使当前行向程序尾移动9行,而Ctrl+D则使当前行向后移动10行。

在使用数字来显示某行语句时将使该行语句成为当前行。而在*提示符之后按一下回车,当前行将下移一行。例如,接着上面的例子,输入:

* 8p

8: TEstInput(char * ValueInput)

* 回车

9: { while ( * ValueInput)}

*

这里8p实际上是两条命令的组合。它使当前行移至源文件的第八行,然后再显示出新的当前行。按回车键将使当前行后移一行。

时间: 2024-10-09 08:42:46

UNIX系统管理:sdb命令使用-源程序的显示和搜索的相关文章

UNIX系统管理:sdb的启动

首先来看看在哪些情况下需要对程序进行调试. 第一种情况(这是大多数用户都会碰到的),程序在运行过程中忽然跳了出来,屏幕上显示一个xxxx-core dumped消息,然后Shell提示符就又显示出来了,其中xxxx表示出错原因.这种情况的出现一般是系统核心认为进程的执行出现了异常,如进程试图去访问一块不允许它访问的存储区域(Memory Fault,Segmentation Fault);或者扫描某个无终止符的字符串(Bus http://www.aliyun.com/zixun/aggrega

UNIX系统管理:程序调试概述

对任何http://www.aliyun.com/zixun/aggregation/7298.html">程序开发而言,程序的调试都是开发过程中的一个重要阶段.程序调试的目的就是找出程序中隐藏的故障,校正那些不正常的指令,使程序能够正常工作. 程序的调试有几种不同的级别.最高级别当然是编程人员通过自己肉眼观察和推断,找出那些有毛病的代码并修改之.最低级别是对汇编代码进行调试.由于汇编语言代码的复杂.冗长与不直观.在汇编级对程序进行调试是一件比较费力的事.但UNIX得开发环境提供了汇编级的

UNIX操作系统tar命令之隐患及解决方法

unix|解决 目前,UNIX操作系统在我国金融界被广泛地采用,UNIX以其强大的功能(分时.多任务.多用户.网络互连.图形接口等),倍受金融企业青睐.中国农业银行现应用的SCO UNIX OPENSERVER50更是功能强劲. 各家银行的储蓄.会计.信用卡等计算机业务处理系统均运行在UNIX操作系统平台上.电子化的发展拓展了银行的业务领域,提高了工作效率,加强了业务的准确性.保密性.安全性,树立了银行的社会形象,产生间接的经济效益.电子化银行的发展对计算机数据的可靠性提出了更高的要求. 据笔

用UNIX的kill命令来终止Oracle的过程

正如你所知,有时候我们有必要终止所有的Oracle过程(process)或者指定的一组Oracle过程.当数据库"锁定"而你无法进入Server Manager来"温柔"的终止数据库时,就可以用UNIX中的kill命令来终止所有的Oracle过程--这是kill命令的常见用途之一.当你需要终止一个UNIX服务器上的一个Oracle实例(instance)时,执行下面的步骤: 终止与ORACLE_SID有关的所有Oracle过程. 用ipcs –pmb命令来识别所有占

Unix系统stty命令用法详解

UNIX系统的命令很多,下面讲解stty. 该命令是一个用来改变并打印终端行设置的常用命令. 1.stty(set tty,设置tty)命令用于检查和修改当前注册的终端的通信参数. UNIX系统为键盘的输入和终端的输出提供了重要的控制手段,可以通过stty命令对特定终端或通信线路设置选项. 可以在stty命令中使用-a查看当前注册终端的设置情况. $ stty -a Speed 9600 baud; line =0;intr= DEL;quit = ^;erase = ^h;kill =^U;

[收藏学习]Unix系统sar命令解释

在UNIX中用sar命令进行系统维护 本文参考:http://fanqiang.chinaunix.net/a1/b5/20020107/08100039.html 原文出自:http://www.yesky.com/ 作者: 周娟 (2002-01-07 08:10:00)     在使用UNIX操作系统的过程中,我们常常会用到各种各样的问题,比如系统运行速度突然变慢,系统容易死机或者主机所带的终端常出现死机,这时我们常常猜 测,是硬盘空间太小,还是内存不足?I/O出现瓶颈,或者是系统的核心参

给系统管理员的 15 条实用 Linux/Unix 磁带管理命令

给系统管理员的 15 条实用 Linux/Unix 磁带管理命令 磁带设备应只用于定期的文件归档或将数据从一台服务器传送至另一台.通常磁带设备与 Unix 机器连接,用 mt 或 mtx 控制.强烈建议您将所有的数据同时备份到磁盘(也许是云中)和磁带设备中.在本教程中你将会了解到: 磁带设备名 管理磁带驱动器的基本命令 基本的备份和恢复命令 为什么备份? 一个备份计划对定期备份文件来说很有必要,如果你宁愿选择不备份,那么丢失重要数据的风险会大大增加.有了备份,你就有了从磁盘故障中恢复的能力.备份

使用Python编写类UNIX系统的命令行工具的教程_python

引言 您是否能编写命令行工具?也许您可以,但您能编写出真正好用的命令行工具吗?本文讨论使用 Python 来创建一个强健的命令行工具,并带有内置的帮助菜单.错误处理和选项处理.由于一些奇怪的原因,很多人并不了解 Python? 的标准库具有制作功能极其强大的 *NIX 命令行工具所需的全部工具. 可以这样说,Python 是制作 *NIX 命令行工具的最佳语言,因为它依照"batteries-included"的哲学方式工作,并且强调提供可读性高的代码.但仅作为提醒,当您发现使用 Py

UNIX系统管理:管理文件

完成这一章,你能做以下事情:使用文件操作命令对文件进行操作. 解释排队打印队列的作用. 认识和使用 交互性的排队打印命令. 监视排队打印系统的状态.&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;1 什么是文件 一个数据的容器或者是一个设备的链接?每一个文件有一个名字,文件可能保存有存储在磁盘上的数据 ?有几种不同类别的文件: - 普通文件-?文本文件,数据文件,图片-?可执行的程序-?目录-?设备文件 UNIX系