Linux编程-GDB调试
本文最后更新于:2 年前
常用命令
命令 | 命令缩写 | 命令说明 |
---|---|---|
set args | 设置主程序的参数 | |
break | b | 设置断点 b test.c:20 |
d | 删除断电,先用info b查看断电,然后按照断点序号删 | |
run | r | 运行程序 |
next | n | 执行当前语句,如果该语句为函数调用,不会进入函数内部 |
step | s | 执行当前语句,如果该语句为函数调用,则进入函数执行其中的第一句语句。但是如果函数是库函数或第三方没有源代码的函数,用s也进不去。 |
p | 打印变量值 print num | |
p/x | 十六进制打印 | |
continue | c | 继续允许程序,直到下一个断点 |
finish | 退出进入的函数,若是你的函数里有断点,是不能退出的 | |
until | u | 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,即跳出当前(for)循环 |
set var name=value | 设置变量的值,如set var i=10 | |
watch | 监视某个变量,变量值改变时停下 watch i | |
quit | q | 退出gdb调试 |
bt | 查看函数调用栈 | |
kill | k | 杀死当前调试进程 |
list | 查看近十行代码 |
GDB查看core文件
- 使用 ulimit -a查看当前core文件的生成限制
- 使用 ulimit -c unlimited解除该限制
- 运行需要调试的程序
- 使用gdb ./文件 生成的core文件直接查看段错误的位置
- 在gdb内使用bt命令可以查看函数的调用栈
多进程调试
调试父进程 set follow-fork-mode parent (缺省)
调试子进程 set follow-fork-mode child
设置调试模式 set detach-on-fork [on|off] ,
- 缺省是on,表示调试当前进程时,其他进程继续运行
- off时调试当前进程,其他进程挂起
查看当前调试的进程 info inferiors
切换当前调试的进程 inferior 进程id
调试已在运行的进程
gdb book1 -p 21495
多线程调试
- 查看线程 info threads
- 切换线程 thread 线程id
- 只运行当前线程 set scheduler-locking on
- 运行全部线程 set scheduler-locking off
- 指定某一线程执行某GDB指令 thread apply 线程id cmd
- 所有线程执行某GDB指令 thread apply all cmd