使用gdb的小结 (未完)
2020年12月10日
缘起
- 把自己用到的一些知识,整理成一系列的文章呢。
- 以gdb开始,gtest在脑海中,C++面试一系列的文章也在酝酿中。
- gdb不阻塞进程进行的调试,这个知识点,面试的时候还被问到过。
内容
一、gdb的的介绍与用法
- 1、gdb本质是
ptrace()
的实现?
- 2、调用gdb的三种方法
- (1)gdb 进程名
- (2)gdb 进程名 core文件
- (3)gdb正在运行的进程
- gdb pid
- gdb attach pid
- gdb -p pid
二、gdb的相关命令
- 比较常用:
b
:设置断点 break 文件名:行号
d
:删除断点
p
:打印 p 变量名
s
:进入函数内部
bt
:进入堆栈,但只显示10层。最内层n,最外层-n
- 其它(我不太熟悉的)
f
:结束函数 finish
u
:结束循环 until
info local
:所有的局部变量。只有debug版本才行。
thread
:转到线程
thread apply all bt
:所有线程(查看死锁时使用)
frame
:转到帧
x
:内存地址
info register
:寄存器
watch
:显示内存
- handle signal keyword改变GDB对singal的处理
三、gdb的简单调试
- 区分版本:debug和release版本,商用或docker中的一般都是release版本。
- 之前都是靠跟相对应的版本进行行数比对。然后一路
p
过来看一下。
四、gdb不阻塞进程运行的调试
- 监控不到心跳,会kill进程
- gdb -batch -ex “command” -p pid
五、gdb的多线程调试
其它
objdump
1、
- set scheduler_locking,off/on/step,这个是干啥,自己不太确定
- 查看socket,用ss命令
履历
- 2020-12-10(21:37-22:00)写了“一、二”部分的内容,“三、四、五”实践的东西,自己要在树莓派上真正调试了再写。
参考