GDB 01、GDB入门(超详细的),包含演示代码,快速入门

01、程序

#include<iostream>
#include<vector>
#include<string>
using namespace std;

void printVector(vector<string>& v){
    cout<<"size = "<<v.size()<<endl;
    cout<<"print begin..."<<endl;
    for (int i = 0; i < v.size(); i++){
        cout<<v[i]<<" ";
    }
    cout<<endl<<"print end..."<<endl;
    cout<<endl;
}

int main(){

    vector<string> v(10, "mhzzj");

	//修改指定下标的数据
	v[6] = "MHZZJ";

	//删除尾部数据(v[n-1])
	v.pop_back();

	//添加数据到尾部(v[n-1])
	v.push_back("zzjmhz");

	printVector(v);

	//删除下标为v[0]的数据,头部
	v.erase(v.begin());
	//边迭代边删除
	vector<string>::iterator it = v.begin();
	while (it != v.end()) {
		if (*it == "zzjmhz") it = v.erase(it);
		else it++;
	}
	printVector(v);
    cout<<"++++++++++++++++++++endl+++++++++++++++++++++++"<<endl;
}

02、GDB调试

生成调试程序

mhzzj@mhzzj-virtual-machine:~/codes/C++$ g++ gdbdemo.cpp -o demo -g

如果是c语言可以使用gcc gdbdemo.cpp -o demo -g

进入gdb调试

gdb demo

mhzzj@mhzzj-virtual-machine:~/codes/C++$ gdb demo
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from demo...done.

显示源码

list:现实源码,可以简写为:l

(gdb) l
2	#include<vector>
3	#include<string>
4	using namespace std;
5	
6	void printVector(vector<string>& v){
7	    cout<<"size = "<<v.size()<<endl;
8	    cout<<"print begin..."<<endl;
9	    for (int i = 0; i < v.size(); i++){
10	        cout<<v[i]<<" ";
11	    }
(gdb) 

如果想查看第n行前后的代码,可以使用l n命令

设置断点

break设置断点,可以简写为:b

(gdb) b 29 #在第29行设置断点
Breakpoint 1 at 0x4011e5: file gdbdemo.cpp, line 29.
(gdb) b printVector
Breakpoint 2 at 0x401003: file gdbdemo.cpp, line 7.

查看断点

info b

(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004011e5 in main() at gdbdemo.cpp:29
2       breakpoint     keep y   0x0000000000401003 in printVector(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&) at gdbdemo.cpp:7

删除断点

d 序号

(gdb) d 2 #删除第2个断点
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004011e5 in main() at gdbdemo.cpp:29

启动程序

启动程序run,可以简写为:r

(gdb) r
Starting program: /home/mhzzj/codes/C++/demo 

Breakpoint 1, main () at gdbdemo.cpp:29
29		printVector(v);

使用run命令可以直接运行到断点的位置,如果想从mian函数开始执行,可以使用start指令

查看变量

查看变量指令为print,可以简写为p

Breakpoint 1, main () at gdbdemo.cpp:29
29		printVector(v);
(gdb) p v
$1 = std::vector of length 10, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj", "zzjmhz"}

监控某个变量

display 变量名

(gdb) display v
1: v = std::vector of length 8, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj"}
(gdb) n
size = 8
8	    cout<<"print begin..."<<endl;
1: v = std::vector of length 8, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj"}
(gdb) 

可以使用undispla命令取消监控

执行下一行

执行下一行next,可简写为:n

Breakpoint 1, main () at gdbdemo.cpp:29
29		printVector(v);
(gdb) display v
1: v = std::vector of length 10, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj", "zzjmhz"}
(gdb) n
size = 10
print begin...
mhzzj mhzzj mhzzj mhzzj mhzzj mhzzj MHZZJ mhzzj mhzzj zzjmhz 
print end...

32		v.erase(v.begin());
1: v = std::vector of length 10, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj", "zzjmhz"}
(gdb) n
34		vector<string>::iterator it = v.begin();
1: v = std::vector of length 9, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj", "zzjmhz"}
(gdb) 

执行到下一个断点

continue 继续运行程序,停在下一个断点的位置,可简写为:c

(gdb) b 39 #在第39行设置断点
Breakpoint 3 at 0x40128f: file gdbdemo.cpp, line 39.
(gdb) c #执行到下一个断点
Continuing.

Breakpoint 3, main () at gdbdemo.cpp:39
39		printVector(v);

进入函数内部

如果执行到某个函数,想进入函数内部,可以使用step指令,简写为s

如果在改行为函数调用,则进入函数内部,否则为执行下一行,效果如图n指令

Breakpoint 3, main () at gdbdemo.cpp:39
39		printVector(v);

(gdb) s
printVector (v=std::vector of length 8, capacity 10 = {...}) at gdbdemo.cpp:7
7	    cout<<"size = "<<v.size()<<endl;

查看栈帧

bt

(gdb) bt
#0  printVector (v=std::vector of length 8, capacity 10 = {...}) at gdbdemo.cpp:7
#1  0x000000000040129b in main () at gdbdemo.cpp:39

切换栈帧

frame 序号

(gdb) frame 1
#1  0x000000000040129b in main () at gdbdemo.cpp:39
39		printVector(v);
(gdb) 

退出进入的函数

退出进入的函数:finish

(gdb) frame 1
#1  0x000000000040129b in main () at gdbdemo.cpp:39
39		printVector(v);
(gdb) frame 0
#0  printVector (v=std::vector of length 8, capacity 10 = {...}) at gdbdemo.cpp:7
7	    cout<<"size = "<<v.size()<<endl;
(gdb) finish
Run till exit from #0  printVector (v=std::vector of length 8, capacity 10 = {...}) at gdbdemo.cpp:7
size = 8
print begin...
mhzzj mhzzj mhzzj mhzzj mhzzj MHZZJ mhzzj mhzzj 
print end...

main () at gdbdemo.cpp:40
40	    cout<<"++++++++++++++++++++endl+++++++++++++++++++++++"<<endl;
1: v = std::vector of length 8, capacity 10 = {"mhzzj", "mhzzj", "mhzzj", "mhzzj", "mhzzj", "MHZZJ", "mhzzj", "mhzzj"}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GDB使用手册 GDB调试器使用手册(一) ................................................................................................. 1 使用GDB: ........................................................................................................................ 1 GDB简介 ......................................................................................................................... 3 GDB的作者 ..................................................................................................................... 3 GDB调试器使用手册(二) ................................................................................................. 4 GDB调试器使用手册(三) ................................................................................................. 9 运行GDB(一些详细的说明) ........................................................................................... 9 谈谈模式的设置............................................................................................................. 11 GDB调试器使用手册(四) ............................................................................................... 12 退出gdb ......................................................................................................................... 12 Shell 命令 ....................................................................................................................... 12 GDB 命令 ...................................................................................................................... 12 Command语法 ............................................................................................................... 13 GDB调试器使用手册(五) ............................................................................................... 13 输入命令的技巧............................................................................................................. 13 GDB调试器使用手册(六-1) ............................................................................................ 14 得到帮助 ........................................................................................................................ 14 在gdb下运行你的程序 ................................................................................................. 16 GDB调试器使用手册(六-2)程序环境 ............................................................................ 19 工作路径 ........................................................................................................................ 19 你程序的输入/输出 ....................................................................................................... 20 调试一个已经运行的程序: ......................................................................................... 20 GDB调试器使用手册(七) ............................................................................................... 21 结束子进程 .................................................................................................................... 21 附加的进程信息............................................................................................................. 21 对多线程程序的调试 ..................................................................................................... 22 调试多进程的程序 ......................................................................................................... 23 停止和继续 .................................................................................................................... 24 断点,观察点和异常 ..................................................................................................... 24 DB调试器使用手册(八) ............................................................................................... 25 设置断点 ........................................................................................................................ 25 设置观察点 .................................................................................................................... 27 断点和异常 .................................................................................................................... 28 DB调试器使用手册(九) ............................................................................................... 29 断点条件 ........................................................................................................................ 29 断点命令列表................................................................................................................. 31 断点菜单 ........................................................................................................................ 32

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值