【Redis基础】gdb调试基础

搭建Debug环境

wget https://github.com/antirez/redis/archive/3.2.13.tar.gz
tar -zxvf 3.2.13.tar.gz
mv redis-3.2.13 /opt/
cd redis-3.2.13
make  

Debug初体验

# 在 redis 安装目录,进入 gdb 调试环境
gdb src/redis-server 

# gdb 添加断点
(gdb) b main
Breakpoint 1 at 0x42ed05: file server.c, line 3962.

###启动服务
(gdb) r ./redis.conf
Starting program: /opt/redis-3.2.13/src/redis-server ./redis.conf
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=2, argv=0x7fffffffe5a8) at server.c:3962
3962    int main(int argc, char **argv) {

###能展示断点所在的代码 ===  这个真是太牛逼了
(gdb) layout src

gdb调试常用命令

命令 描述 demo
gdb file 加载被调试的可执行程序文件 gdb src/redis-serve
r Run 的缩写,运行被调试的程序。 r ./redis.conf
c Continue 的缩写。继续执行被调试程序,直至下一个断点或程序结束 c
b Breakpoint 缩写。设置断点。可以使用 行号、函数名称、执行地址等方式指定断点位置 r ./redis.conf
s/n s 相当于“单步跟踪并进入”,也就是说进入到执行的函数内部。n 相当于“单步跟踪”,不进入到执行函数内部
p 变量名称 Print 缩写。显示指定变量的值。 p server
fin finish缩写,func函数会继续执行完,并打印返回值
return return命令,这样函数不会继续执行下面的命令,而是直接返回到之前的地方

gdb添加断点

普通断点

根据代码行数设置断点是最常见的一种方式,在debug程序运行前就可以进行断点的配置。如:

(gdb) b src/main.cpp:127
函数断点

这种断点是当程序执行到某个程序时就会触发断点。设置方式如:

(gdb) b funcName

猜你喜欢

转载自www.cnblogs.com/wtb123456/p/12984400.html