使用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的command命令有哪些

五、gdb的多线程调试

其它

objdump

  • -d
  • -s
  • -l
  • dmesg

1、

  • set scheduler_locking,off/on/step,这个是干啥,自己不太确定
  • 查看socket,用ss命令

履历

  • 2020-12-10(21:37-22:00)写了“一、二”部分的内容,“三、四、五”实践的东西,自己要在树莓派上真正调试了再写。

参考