我们现在的编译工具越来越高大上,所以会gdb的人越来越少,每每看到被人使用GDB调试代码心里面默默的竖起大拇指,不过话说回来会gdb调试的人估计是风毛菱角,不过在真实的开发环境中我们还是会用到的。尤其是现在转到linux平台开发碰到多进程的开发没办法还是需要学习学习。发现其实也没有想象中的难。
看了以下文章你也能装大佬。
首先我们看看GDB的一些指令,如下表:
使用GDB前需要安装gdb工具
yum install gcc-c++ #centos 安装c++编译器
sudo apt install g++ #ubunto 安装c++编译器
sudo apt install gdb #安装gdb调试器
GDB指令表
命令 |
命令缩写 |
命令说明 |
list |
l |
显示多行源代码 |
break |
b |
设置断点,程序运行到断点的位置会停下来 |
info |
i |
描述程序的状态 |
run |
r |
F5 开始运行程序 |
display |
disp |
跟踪查看某个变量,每次停下来都显示它的值 |
step |
s |
F11 执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句 |
next |
n |
F10 执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句) |
|
p |
打印内部变量值 |
continue |
c |
F5 继续程序的运行,直到遇到下一个断点,相当于 |
set var name=v |
设置变量的值,可以在程序运行过程中修改值,感觉这个很bug |
|
start |
st |
开始执行程序,在main函数的第一条语句前面停下来 |
file |
装入需要调试的程序,默认是已经装载好了。 |
|
kill |
k |
终止正在调试的程序 |
watch |
监视变量值的变化 |
|
backtrace |
bt |
产看函数调用信息(堆栈) |
frame |
f |
查看栈帧 |
quit |
q |
退出GDB环境 |
x | x | 查看内存地址中的值 |
我们来看看如何使用上面指令吧!
首先需要一个小程序
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "hello world!";
string str2 = "I love you";
cout << str1 << endl;
cout << str2 << endl;
return 0;
}
我们来编译他
#-g 表示编程成Debug模式, -o 表示编程输出成main可执行文件。
g++ -g main.cpp -o main
#./main
运行结果:
gdb调试
gdb main
输入命令:r 或者 run
看到一下信息
starting program: 表示运行程序的路径
process : 表示运行程序的进程号。
如何给gdb打断点呢 ?
可以看看这个文章:https://blog.csdn.net/arv002/article/details/110133971