Linux断点设置、单步调试以及查看变量值
已经有一个main.cpp文件,内容是:
#include <iostream>
#include <sys/socket.h>
#include <string.h>
#include <cstdio>
using namespace std;
int i;
int main(int argc,char *argv[]){
int MAX_num=0;
int client_num=0;
for(i=0;i<argc;){
MAX_num=atoi(argv[i]);
i=i+2;
client_num=atoi(argv[i]);
i=i+1;
}
cout<<"初始化完毕"<<endl;
}
Linux命令行中输入g++ -g main.cpp -o main
将main.cpp编译成可执行文件main
然后输入gdb main
进入调试,使用b设置断点,这里的b也就是breakpoint的意思,比如b /home/yuqing/main.cpp:12
即设置12行处为断点。输入r
运行程序,会在12行处停下。也可以输入n
进行单步调试。
输入info b
可以查看当前所有的断点,以及显示断点所在的行。使用d 1
可以删除断点1,使用d 1 2 3
可以批量删除断点。
当设置好几个断点的时候,输入r
会在最初那个断点处停下,无法到达下面的断点。
怎么在每一个断点处都停下呢,首先输入r
运行程序,然后输入c
也就是continue,它会使程序在每一个断点处都停下。
另外就是设置条件断点,注意这个条件需要是全局变量。比如i,可以使用watch i
将i设置为条件变量,它会监视i的每一次变化。
使用bt
命令可以查看函数调用栈。
查看断点处变量值
在设置断点后,输入r
或n
运行至断点处停下后,可以使用p
指令打印需要查看的变量值,如p MAX_num