Linux GDB使用
目录
文章目录
- Linux GDB使用
- 先编译文件
- 1.检查安装
- 1.1 安装GDB
- 2.启动GDB
- 3.退出GDB
- 4.设置断点
- 4.1 在指定行号处设置断点
- 4.2 在指定函数名处设置断点
- 4.3 在指定源文件和行号处设置断点
- 4.4查看断点信息
- 4.5删除断点
- 5.运行
- 5.1 <font color=#ff0000>逐过程:遇到函数调用时不会进入函数内部。
- 5.2 <font color=#ff0000>逐语句:遇到函数调用时会进入函数内
- 6.查看和修改变量
- 7.查看函数调用栈
- 7.查看源码和行号
- 8.打印变量的的值
- 多线程调试(待)
- 设置线程锁(待)
- 9.总命令表
先编译文件
-g:包含调试信息
-o:控制优化级别
1.检查安装
gdb --version
1.1 安装GDB
sudo apt-get install gdb
2.启动GDB
直接调试目标程序:gdb ./hello_server
附加到进程ID:gdb attach pid
调试core文件:gdb filename corename
3.退出GDB
命令:q 然后回车 或者 Ctrl + d
4.设置断点
4.1 在指定行号处设置断点
b + 行号
4.2 在指定函数名处设置断点
b 源文件:函数名
4.3 在指定源文件和行号处设置断点
b 源文件:行号
4.4查看断点信息
info b
4.5删除断点
清除某个断点 (gdb) delete 4
清除所有断点 (gdb) delete
5.运行
有断点运行到断点
r
5.1 逐过程:遇到函数调用时不会进入函数内部。
n
5.2 逐语句:遇到函数调用时会进入函数内
s
6.查看和修改变量
打印变量值:p 变量名
修改变量值:set var 变量名 = 新值
追踪变量:display 变量名,会在每次程序停止时显示变量值。
取消追踪:undisplay 变量名编号
7.查看函数调用栈
bt
鄙人样例
设置断点
#0 表示最内层的函数调用
#1
#2
#3 表示 Init_ShellState的调用,它在 main.c调用。
#4 表示 main 函数的调用,它是程序的入口点
7.查看源码和行号
l
8.打印变量的的值
p 变量名
多线程调试(待)
查看线程信息:info thread
切换线程:thread 线程编号
对指定线程执行命令:thread apply 线程编号 command
设置线程锁(待)
锁定线程:set scheduler-locking on
解锁线程:set scheduler-locking off
单步执行时锁定线程:set scheduler-locking step
9.总命令表
ctrl + d 或 quit 调试命令 gdb binFile 退出
list( l ) 行号 显示binFile源代码,接着上次的位置往下列,每次列10行。
list( l ) 函数名 列出某个函数的源代码。
run( r ) 运行程序。
next( n ) 单条执行。
step( s ) 进入函数体调用
break(b) 行号 在某一行设置断点
break(b) 函数名 在某个函数开头设置断点
info break( b ) 查看断点信息。
finish 执行到当前函数返回,然后停下来等待命令
print( p ) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量 打印变量值(显示一次)。
set var 修改变量的值
continue( c ) 从当前位置开始连续而非单步执行程序
delete breakpoints 删除所有断点
delete breakpoints n 删除序号为n的断点
disable breakpoints 禁用断点
enable breakpoints 启用断点
info(或i) breakpoints 参看当前设置了哪些断点
display 变量名 跟踪查看一个变量,每次停下来都显示它的值
undisplay 序号 取消对先前序号设置的那些变量的跟踪
until X行号 运行至X行
breaktrace(或bt) 查看各级函数调用及参数
info( i ) locals 查看当前栈帧局部变量的值
quit 退出gdb
优秀文献推荐:
[Linux | 调试器GDB的详细教程【纯命令行调试】]https://blog.csdn.net/Fire_Cloud_1/article/details/129213449
听歌曲看图,意想不到
希望今日工作/学习的你也能get到我的快乐…
参考文献:感谢!!
https://blog.csdn.net/lovely_dzh/article/details/109160337