频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

新手看招:调试工具GDB基本知识全接触

来源: 作者: 出处:巧巧读书 2007-06-21 进入讨论组

  3.10 修改变量值

  在调试程序时,你可能想改变一个变量的值,看看在这种情况下会发生什么。用set指令可以修改变量的值:

  set varible=value

  例如你想将一个变量tmp的值赋为10,

  set tmp=10

  3.11 检查内存值

  检查内存值的指令是x,x是examine的意思。用法如下:

  x /NFU ADDR

  其中N代表重复数,F代表输出格式(见2.13),U代表每个数据单位的大小。U可以去如下值:

  b :字节(byte)

  h :双字节数值

  w :四字节数值

  g :八字节数值

  因此,上面的指令可以这样解释:从ADDR地址开始,以F格式显示N个U数值。例如:

  x/4ub 0x4000

  会以无符号十进制整数格式(u)显示四个字节(b),0x4000,0x4001,0x4002,0x4003。

  3.12 输出格式

  缺省情况下,输出格式依赖于它的数据类型。但你可以改变输出格式。当你使用print命令时,可以用一个参数/F来选择输出的打印格式。F可以是以下的一些值:

  'x' 16进制整数格式

  'd' 有符号十进制整数格式

  'u' 无符号十进制整数格式

  'f' 浮点数格式

  3.13 单步执行指令

  单步执行指令有两个step和next。Step可以让你跟踪进入一个函数,而next指令则不会进入函数。

  3.14 继续执行指令

  当程序被断下后,你查看了所需的信息后,你会希望程序执行下去,输入 continue, 程序会继续执行下去。

  3.15 帮助指令help

  在GDB中,如果想知道一条指令的用法,最方便的方法是使用help。使用方法很简单,在help后跟上指令名。例如,想知道list指令用法,输入

  help list

  4.一个简单的例子

  上面仅是GDB常用指令的简单介绍。本节将结合一个简单的例子,向大家演示这些常用指令的具体应用。这是一个冒泡排序算法的程序,这个例子的目的仅仅是演示,并不是实际调试。将下面的源程序存为bubble.c文件,并编译好。   

#include <stdio.h> 
#define MAX_RECORD_NUMBER 10 
int record[MAX_RECORD_NUMBER] =
{12,76,48,62,94,17,37,52,69,32}; 
swap(int * x , int * y )
{
int temp;
temp = *x;
*x = *y;
*y = temp;
} 
int main()
{
int i,j;
for( i = 0 ; i < MAX_RECORD_NUMBER - 1; i++ )
{
for( j = MAX_RECORD_NUMBER - 1; j > i; j--)
if( record[j] < record[j-1] )
swap(&record[j],&record[j-1]);
} 
for( i = 0; i < MAX_RECORD_NUMBER -1; i++)
printf("%d ",record[i]); 
printf("\n");
return 1;
                  }

  记得在编译时用-g开关。如:gcc -g -o bubble bubble.c。你能在当前子目录下得到一个编译好的文件bubble。我们下面将以这个程序为例子向大家演示上面的指令在实际中的应用。

  首先启动GDB,可以在启动的同时载入文件bubble,如:gdb bubble。也可以分两步进行,先启动GDB,执行gdb,进入GDB后,再执行file bubble。

  这时可以用list指令列出源程序,list的使用比较简单,但其实在GDB中最不方便的就是看源程序,主要原因是因为GDB仅是一个文本方式的调试器,无法让你用鼠标和光标键来翻阅源程序,在这方面ddd等窗口程序有巨大的优势。

  我们先来查看一下当前源程序的信息,如下:

(gdb) info source
Current source file is bubble.c
Compilation directory is /root/sample/
Located in /root/sample/bubble.c
Contains 32 lines.
Source language is c.
                  Compiled with stabs debugging format.

  我们可以知道程序名,目录,文件大小,语言等信息。

  下面我们来设置断点,我们想在函数swap出设置一个断点:

  (gdb) br swap

  Breakpoint 1 at 0x80483d6: file bubble.c, line 11.收藏 http://www.qqread.com/linux/2007/06/a317961.html 更多文章 更多内容请看电脑知识无线局域网基本知识专题,或进入讨论组讨论。

收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章