Linux gdb调试
Posted Leo_wlCnBlogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux gdb调试相关的知识,希望对你有一定的参考价值。
Linux gdb调试
没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧!
GDB概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include<iostream> using namespace std; int sum( int arg1, int arg2) { return arg1+arg2; } int main() { int a=1; int b=2; cout<< "sum = " <<sum(a,b)<<endl; return 0; } |
第一步:编译
[root@localhost CppProject]# g++ -g sum.cpp -o sum
查看下文件
第二步:使用gdb设置断点调试
[root@localhost CppProject]# gdb sum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
(gdb) l 1 #include<iostream> 2 using namespace std; 3 int sum( int arg1, int arg2) 4 { 5 return arg1+arg2; 6 } 7 int main() 8 { 9 int a=1; 10 int b=2; (gdb) 11 cout<< "sum = " <<sum(a,b)<<endl; 12 return 0; 13 14 } (gdb) |
在第11行设置断点
(gdb) break 11
Breakpoint 1 at 0x8048742: file sum.cpp, line 11.
直接在函数名处设置断点
(gdb) break sum
Breakpoint 2 at 0x80486a7: file sum.cpp, line 5.
查看已设置断点信息
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048742 in main at sum.cpp:11
2 breakpoint keep y 0x080486a7 in sum(int, int) at sum.cpp:5
运行:
(gdb) run
Starting program: /root/CppProject/sum
Breakpoint 1, main () at sum.cpp:11
11 cout<<"sum = "<<sum(a,b)<<endl;
查看代码:
(gdb) l
(gdb) l 1 #include<iostream> 2 using namespace std; 3 int sum(int arg1,int arg2) 4 { 5 return arg1+arg2; 6 } 7 int main() 8 { 9 int a=1; 10 int b=2; (gdb) 11 cout<<"sum = "<<sum(a,b)<<endl; 12 return 0; 13 14 } (gdb)
(gdb) n表示next单步进行
Breakpoint 1, main () at sum.cpp:11
11 cout<<"sum = "<<sum(a,b)<<endl;
(gdb) n
sum = 3
12 return 0;
(gdb)
gdb下查看变量的值:p 变量名
(gdb) p a
$1 = 1
(gdb) p b
$2 = 2
查看函数内存地址:
(gdb) p sum
3=int(int,int)0x80486a4<sum(int,int)>(gdb)psum(a,b)3=int(int,int)0x80486a4<sum(int,int)>(gdb)psum(a,b)4 = 3
调用函数
(gdb) p sum(100,200)
$5 = 300
断点调试就这么多了,有兴趣的可以学习设置观察点,捕捉点调试。
以上是关于Linux gdb调试的主要内容,如果未能解决你的问题,请参考以下文章