gdb常用操作

查看core文件是否生成,返回0表示不生成,一般是unlimited不显示core文件大小,设置过小可能会截断core文件,调试时会报错

1
ulimit -c

开启core文件生成

  • 临时生效
1
ulimit -c unlimited   // 当前启动进程生效,临时生效
  • 永久生效(不建议,或者第一个参数指定为具体执行用户)
1
2
3
4
5
6
7
## 编辑  /etc/security/limits.conf
###### 所有进程生效的写法,不建议
#* soft core unlimited
#* hard core unlimited
##### 指定www-data用户执行的进程不限值core文件大小
www-data soft core unlimited
www-data hard core unlimited

gdb加载core文件

1
2
# gdb 可执行文件  core文件
# 例子: gdb php-fpm core.1234

gdb命令

  1. 查看函数堆栈

    1
    (gdb) bt 或者 where
  2. 跳到第bt的第N帧

    1
    f N
  3. 列出源码

    1
    list 或者 l
  4. 重复上一次命令—回车

  5. 设置断点,在源程序第N行处 : break/b

    1
    (gdb)break 12
  6. 设置断点,在函数func()入口处

    1
    (gdb) break fun
  7. 查看断点信息

    1
    (gdb) info break
  8. 根据GDB分配给断点的标识符@1、@2…等等来删除

    1
    (gdb) delete 12
  9. 运行程序

    1
    (gdb) run
  10. 单步执行 next/n

    1
    (gdb) next
  11. 继续运行程序 continue

    1
    (gdb) continue
  12. 打印变量i的值 print/p

    1
    (gdb) print i
  13. 打印vector变量前两个元素

    1
    (gdb) p *(v._M_impl._M_start)@2
  14. 打印array第60~69的元素

    1
    (gdb) p array[60]@10
  15. 打印a的成员b

    1
    (gdb) p a.b
  16. 打印a的类型

    1
    (gdb) whatis a
  17. 打印a类型的结构

    1
    (gdb) ptype a
  18. 退出函数

    1
    (gdb) finish
  19. 退出gdb quit / q

    1
    (gdb) quit