Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366980
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-09-18 18:07:02

2.如何查看程序的执行?

Gdb函数有点类似于程序的解释器。你可以通过发送信号在任何时候停止程序的执行。通常是通过像ctrl+c这样的组合键产生中断信号SIGINT来终止程序运行。在gdb之外,这将终止你的程序。而Gdb将跟踪这个信号,并停止程序的执行。同样的,通过断点,你可以在任意一行代码或者函数调用处停止程序运行。一旦你的程序停止,你可以查看你的程序运行到了哪里,查看当前范围的变量值,以及内存空间、cpu寄存器等。你也可以改变变量或者内存,来观察对程序有什么影响。

2.1 如何停止执行?

你能够通过向你的程序发送类似于SIGINT的信号来停止程序执行。这是通过CTRL+C组合键实现的。在下面的例子中,程序运行后,我按下了CTRL+C组合键。

(gdb) run

Starting Program: /home/ug/ryansc/a.out

 

Program received signal SIGINT, Interrupt.

0x80483b4 in main(argc=1, argv=0xbffffda4) at loop.c:5

5   while(1){

...

(gdb)

2.2如何继续执行?

对于在任何时间停止的程序,使用continue命令重新执行之。

2.3如何查看程序在何处停止?

使用list命令使得gdb打印出程序停止处之上以及其下部分的代码。在下面的例子中,断点位于第8行。

(gdb) list

3       int main(int argc, char **argv)

4       {

5         int x = 30;

6         int y = 10;

7      

8         x = y;

9      

10        return 0;

11      }

2.4如何逐行单步执行代码?

首先,通过发送信号或者使用断点停止程序的运行。然后,使用nextstep命令。

5   while(1){

(gdb) next

7   }

(gdb)

注意:nextstep命令是不同的。在一个为函数调用的代码行上,next将直接“越过”该函数调用到下一行代码,而step将“进入”该函数调用。

Next命令:

(gdb)

11     fun1();

(gdb) next

12 }

The step command:

(gdb)

11     fun1();

(gdb) step;

fun1 () at loop.c:5

5    return 0;

(gdb)

2.5如何检查变量?

使用print命令加上变量名作为参数。例如,如果你有int x char *s

(gdb) print x

$1 = 900

(gdb) print s

$3 = 0x8048470 "Hello World!\n"

(gdb)

注意:print命令的输出总是$## = (value)的形式。其中$##是一个简单的计数器,用以跟踪已经检查过的变量。

2.6如何修改变量?

使用set命令加上C语言的赋值语句作为其参数。例如,改变x的值为3

(gdb) set x = 3

(gdb) print x

$4 = 3

注意:在新版本的gdb中,可能需要使用命令“set var”,在上例中应当为“set var x=3”。

2.7如何调用链接进程序的函数?

在调试器的命令行上,你可以使用call命令来调用任何链接进成粗的函数。这包括你自己的代码以及标准函数库。例如,如果你想导出程序的dump core

(gdb) call abort()

2.8如何从一个函数返回?

使用finish命令来完成函数的执行,并返回到调用者。该命令也将显示该函数的返回值。

(gdb) finish

Run till exit from #0  fun1 () at test.c:5

main (argc=1, argv=0xbffffaf4) at test.c:17

17        return 0;

Value returned is $1 = 1

 

阅读(2232) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~