Linux之gdb调试详解

1、gdb调试分为Debug版本和Release 版本

  • Debug版本

Debug版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是debug版本的可执行文件。

  • Debug版本的生成:

因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。
gcc -c hello.c -g -->生成包含调试信息的中间文件
gcc -o hello hello.o
或者
gcc -o hello hello.c -g

  • Release版本

Release版本为发行版本,是提供给用户使用的版本。用gcc默认生成的就是Release版本。
首先将源代码编译、链接生成Debug版本的可执行文件,然后通过’gdb Debug 版本的可执行文件名’进入调试模式。

2、单线程、单线程基础调试命令

l   //显示main函数所在的文件的源代码
list文件名:num // 显示filename文件nuum行上下的源代码
b  行号//给指定行添加断点
b  函数名//给指点函数的第一有效行添加一个断点
info break //显示断点信息
delete断点号  //删除指定断点
disable 断点号//将断 点设定为无效的,不加断点号,将所有断点设置为无效
enable  断点号 //将断点设定为有效的,不加断点号,将所有断点设置为有效
r (run)  //运行程序
n (next)  //单步执行
c (continue) //继续执行,直接执行到下一个断点处
s  //进入将要被调用的函数中执行
finish //跳出函数
q  //退出调试
p val //打印变量val的值
p &val  //打印变量val的地址
p a+b //打印表达式的值
P arr(数组名)  //打印数组所有元素的值
p *parr@len //用指向 数组的指针打印数组所有元素的值
display //自动显示, 参数和p命令一样
info display // 显示自动显示信息
undisplay +编号//删除指定的 自动显示
ptype val // 显示变量类型
bt  //显示函数调用栈

3、多线程调试命令

  • a)利用 info threads查看线程信息;
  • b) thread id 调试目标id指定的线程;
  • c) set scheduler-locking off| on | step;
 “off” 表示不锁定任何线程;
 “on"只有当前被调试的线程继续运行;
 "step”在单步执行的时候,只有当前线程会执行;

Guess you like

Origin blog.csdn.net/weixin_48560325/article/details/121853627