GDB

来源:互联网 发布:linux拷贝当前目录 编辑:程序博客网 时间:2024/05/29 10:19

一、概要
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。
二、gdb中常用命令
1.r:run 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。
(gdb) r
2.c:continue 程序碰到断点会暂停,按c程序继续,到下一个断点结束。
(gdb)c
3.b:breakpoint 设置断点,b后可加<函数名称>(b main)、<行号>(b number)、*<代码地址>(b *0x80003000)
d:删除断点,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。
4.s 相当于其它调试器中的“Step Into (单步跟踪进入)”。执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
(gdb)s
n 相当于其它调试器中的“Step Over (单步跟踪)”。执行一行源程序代码,此行代码中的函数调用也一并执行。
(gdb)n
5.si,ni。
si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。
(gdb)si ;(gdb)ni
6.p:(print)加 变量名称,打印这个变量的值
(gdb)p i
7.display …:display,设置程序中断后欲显示的数据及其格式。
例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令

“display /i $pc”

其中 $pc 代表当前汇编指令,/i 表示以十六进行显示

(gdb) display /i $pc
8.q:quit 退出GDB调试环境。
(gdb) q
9.help加 [命令名称]:GDB帮助命令,提供对GDB名种命令的解释说明
(gdb) help s
三、实例

 #include<stdio.h> void swap (int a ,int b) {       int c;     c=a;     a=b;     b=c; } int main (void) {    int a=10;    int b;    swap (int a,int b);    printf("a=%d b=%d\n");  } 

在Linux环境下,vim中将此代码命名为swap.c

$gcc -g swap.c ##gcc后加 -g,使用参数 -g 表示将源代码信息编译到可执行文件中

$gdb a.out ##gdb环境下输出

接下来进入gdb(进入gdb后,最好显示程序行号“:+set nu”)

(gdb)b main ##在main函数处设置断点
(gdb)r #执行程序
(gdb)b 14 ##在20行设置断点(swap函数处)
(gdb)c ##程序在main断点处继续执行,到swap函数处停止
(gdb)p a ##打印a的值
(gdb)p &a ##打印a的地址
(gdb)s ##因为程序在swap处停了,所以s命令执行一行命令,即执行swap函数

上述命令演示如何进入gdb以及如何使用常用命令,gdb可以分段来检查程序的错误,非常实用。

原创粉丝点击