Linux编程-GDB工具的使用,gcc,gdb

1. 内容简介:

GDB是GNU symbolic debugger的简称,顾名思义,它是一个调试器,可以用GDB进行C/C++语言的调试。GDB受GPL(公共许可证)的保护。

当我们进行C,C++程序进行调试的时候,经常要进行断点调试,以及查看变量,寄存器,内存及堆栈信息,甚至改变内存值,GDB可以轻松做到这些。说白了,GDB是一个功能很强大的调试器,在Linux系统中,通常大部分都自带C,C++语言的GDB调试器,通过一系列命令来进行调试。

2. GDB的特点:

功能强大,简单易用,扩展性强,支持广泛,几乎所有的集成开发环境都支持GDB。

3、GDB快速入门:

要想使用GDB调试,那么,GDB调试的对象是谁?当然是目标程序了,这里,已可执行程序来说明。

程序举例:求和函数的简单实现与运用

代码:

#include <stdio.h>
int main() {
	int a = 5;
	int b =3;
	int res = sum(a,b);
	printf("sum=%d",res);

}

int sum(int a,int b) {
	int c = a+b;
	return c;
}

我们使用gcc命令先编译一个目标文件

@thinkpad-pc /cygdrive/e/stu/c
$ ls
sum.c

@thinkpad-pc /cygdrive/e/stu/c
$ gcc -g -o sum sum.c

@thinkpad-pc /cygdrive/e/stu/c
$ ls
sum.c  sum.exe

我是在windows下,使用Cygwin交叉编译环境进行的编译。

运行一下:

@thinkpad-pc /cygdrive/e/stu/c
$ ./sum.exe
sum=8

下面,来进行GDB调试:

$ gdb sum.exe
GNU gdb (GDB) 7.5.50.20130309-cvs (cygwin-special)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-cygwin".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /cygdrive/e/stu/c/sum.exe...done.

说明:使用gdb filename来进入gdb调试模式,可以看到gdb的一些基本信息,例如版本号等。

继续进行断点调试:

(gdb) br sum
Breakpoint 1 at 0x4011c2: file sum.c, line 11.
(gdb) br 12
Breakpoint 2 at 0x4011ce: file sum.c, line 12.
(gdb) run
Starting program: /cygdrive/e/stu/c/sum.exe
[New Thread 6612.0x1c40]
[New Thread 6612.0x1f2c]
    345 [main] sum 6612 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer.  Please report this problem to
the public mailing list cygwin@cygwin.com

Breakpoint 1, sum (a=5, b=3) at sum.c:11
11              int c = a+b;
(gdb) p a
$1 = 5
(gdb) p b
$2 = 3
(gdb) p c
$3 = -2147316400
(gdb) cont
Continuing.

Breakpoint 2, sum (a=5, b=3) at sum.c:12
12              return c;
(gdb) p c
$4 = 8
(gdb) runj
Undefined command: "runj".  Try "help".
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) n
Program not restarted.
(gdb)

说明:

(1)使用br来设置断点,br+函数名;br + 行号;

(2)使用run来运行;

(3)使用p + 变量名,进行变量值的显示;

(4)如果所有的断点都执行完了,程序也执行完了,会提示“The program being debugged has been started already.
Start it from the beginning? (y or n)” ,询问是否重新开始调试程序。

退出gdb调试:

(gdb) quit
A debugging session is active.

        Inferior 1 [process 6612] will be killed.

Quit anyway? (y or n) y

error return /netrel/src/gdb-7.5.50-2/gdb/windows-nat.c:1276 was 5

@thinkpad-pc /cygdrive/e/stu/c

说明:

(1)使用quit来退出gdb调试,而且会进行确认退出提示。

2. GDB的常用命令总结:

(1)gdb (gdb filename): 进入gdb调试模式,如果不加文件名,就需要在gdb模式下,手动输入文件名;
(2)run:运行程序;
(3)br :设置断点,br+函数名,br+代码行号;
(4)p:查看变量值;p+变量名;
(5)quit:退出gdb调试模式;
(6)info source:查看当前源程序;
(7)info br:查看断点的详细信息;
(8)info stack:查看堆栈信息;
(9)step:单步执行,可以跟踪进入一个函数;
(10)next:单步执行,不会进入函数;
(11)run:运行程序;
(12)help:查看帮助信息。

gdb还有很多调试命令,上面只列出了最常用的几个。


熟悉程序代码的每一步是如何运行的,运行结果是什么,调试可以做到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值