如何学习 gdb?如何学习 Linux C/C++ 调试?

如果不熟悉 Linux 命令行操作,那么 gdb 对你来说可能有点难,建议先学 Linux 命令行的基本操作,推荐《鸟哥的Linux私房菜基础篇》和《Linux就是这个范儿》这两本书。

鸟哥的Linux私房菜基础篇

链接: https://pan.baidu.com/s/15tyHgfL417OY119D4KBdHg 提取码: e8pc

Linux就是这个范儿

链接: https://pan.baidu.com/s/1HsX08i4QXsl_yy_HvoKqJQ 提取码: 9w73

等你熟悉了 Linux 命令行之后,学习 gdb 就容易一点了,但是还是要多练,常用的 gdb 命令并不多,但是也需要一些调试和操作系统的基础知识,如断点、调用堆栈、线程等概念,如果你已经了解了这些基础概念之后,学习 gdb 就不难了,只要你肯练习,十分钟内足可掌握,但是要灵活使用 gdb 调试还是需要多加练习,建议用 gdb 去调试一些工业级的开源项目,例如 Nginx、Redis 这样的源码。

我写过一篇如何使用 gdb 调试 Nginx 的源码,建议在你熟悉 gdb 调试之后再回过头来看这篇文章:

如何高效的学习 Nginx 源码,汲取养分? - 知乎

常用的 gdb 命令并不多,我这里总结了一个表:

命令名称

命令缩写

命令说明

run

r

运行一个程序

continue

c

让暂停的程序继续运行

break

b

添加断点

tbreak

tb

添加临时断点

backtrace

bt

查看当前线程的调用堆栈

frame

f

切换到当前调用线程的指定堆栈

info

info

查看断点/线程等信息

enable

enable

启用某个断点

disable

disable

禁用某个断点

delete

del

删除断点

list

l

显示源码

print

p

打印或修改变量或寄存器值

ptype

ptype

查看变量类型

thread

thread

切换到指定线程

next

n

运行到下一行

step

s

如果有调用函数,进入调用的函数内部,相当于step into

until

u

运行到指定行停下来

finish

fi

结束当前调用函数,到上一层函数调用处

return

return

结束当前调用函数并返回指定值,到上一层函数调用处

jump

j

将当前程序执行流跳转到指定行或地址

disassemble

dis

查看汇编代码

set args

设置程序启动命令行参数

show args

查看设置的命令行参数

watch

watch

监视某一个变量或内存地址的值是否发生变化

display

display

监视的变量或者内存地址,当程序中断后自动输出监控的变量或内存地址

dir

dir

重定向源码文件的位置

网上很多关于 gdb 的教程都是零散的,不成体系,且调试的都是各种玩具型程序,看完后很多读者还是不知道如何调试大型 C/C++ 项目,因此我结合自己的工作经验,写了一套《gdb 高级调试实战教程》,这个教程有如下特点:

  • 以调试开源项目 Redis-Server 为例,项目不是玩具型的,具有实战意义;

  • 按调试流程,从 gdb 附加调试程序,到启动 gdb 调试再到使用 gdb 中断 Redis 查看各种状态,循序渐进地介绍各种 gdb 调试命令;

  • 介绍了实际工作中 gdb 的各种高级调试技巧,例如如何显示超长字符串、如何使用 gdb 调试多进程程序等等;

  • 也介绍了基于 gdb 的一些高级工具,如 cgdb、VisualGDB,这些章节是为不习惯 gdb 显示源码方式的同学量身定制。

以下是电子书目录:

gdb 高级调试实战教程》电子书下载链接:

链接: https://pan.baidu.com/s/1OPBKhApfLcrkSvf8jva6NQ 提取码: cusc

相关的配套资源:

链接: https://pan.baidu.com/s/1IcMOf5bQLoSwYLDn_SbRjg 提取码: uuau

总而言之,熟练掌握 gdb 调试等于拥有了学习优秀 C/C++ 开源项目源码的钥匙,只要可以利用 gdb 调试,再复杂的项目,在不断调试和分析过程中总会有搞明白的一天。

一些可能对你有用的资源:

C++高性能服务器网络框架设计的细节 - 知乎 Live

轻松搞定技术面试中常见的网络通信问题 - 知乎 Live

如何求职 C++ 后端开发岗位 - 知乎 Live

一些有用的资源:

cppguide.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值