GDB调试C语言的常用命令

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,Linux开发人员必备的技能之一。长时间不使用命令很容易忘记,做下记录。

GDB功能

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。

GDB的启动

将调试信息加入到可执行文件中。使用-g命令可以实现。如下:

 

#gcc -g pointer.c -o pointer.out

如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。当用-g把调试信息加入,并成功编译目标代码以后,看看如何用gdb来调试。

生成目标文件后,执行如下代码:

 

#gdb pointer.out

Ubuntu下启动界面如下所示:

GDB启动界面

GDB调试命令

1、list 列出文件代码。如果一次显示不全可以多使用几次list(简写l)命令或者直接回车


(gdb) list

2、start 运行代码。单步执行。

3、run 运行代码。直接执行到程序最后。

4、print 打印表达式的值。比如 print a 表示打印print a变量的值。

5、next 单步执行 (在停止之后); 跳过函数调用(与step相对应,step会进入函数内部)。

6、step 单步执行 (在停止之后); 进入函数调用。

7、bt (backtrace缩写)显示程序堆栈信息。

 
(gdb) bt 
#0 main () at pointer.c:5

8、frame(或f) 帧编号 选择栈帧。例如:在调用函数中,每个函数都会有一个栈以及对应的帧。如7中的代码所示。#0 其中0表示帧。

9、info registers 要查看寄存器的值。

GDB查看内存地址

格式: x /nfu <addr>,如下代码:


(gdb) x/3uh 0x7fffffffdd88

0x7fffffffdd88: 10 0 20

x 是 examine 的缩写

n表示要显示的内存单元的个数

f表示显示方式, 可取如下值:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u表示一个地址单元的长度,b表示单字节,h表示双字节,w表示四字节,g表示八字节。

 

本条目发布于。属于C分类。作者是

关于莫飞

总有那么一件事值得你去坚持!一个有理想的人,这辈子未必会实现理想,但是他在追求理想的路上遇到的风景,这是没有理想的人到死也不曾有过的!

GDB调试C语言的常用命令》上有2条评论

发表评论

电子邮件地址不会被公开。