Linux gdb调试入门
2016-05-19 09:53
471 查看
没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧!
GDB概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
第一步:编译
[root@localhost CppProject]# g++ -g sum.cpp -o sum
查看下文件
第二步:使用gdb设置断点调试
[root@localhost CppProject]# gdb sum
在第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) 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) p sum(a,b)
$4 = 3
调用函数
(gdb) p sum(100,200)
$5 = 300
断点调试就这么多了,有兴趣的可以学习设置观察点,捕捉点调试。
GDB概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
#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
(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) p sum(a,b)
$4 = 3
调用函数
(gdb) p sum(100,200)
$5 = 300
断点调试就这么多了,有兴趣的可以学习设置观察点,捕捉点调试。
相关文章推荐
- nethogs 命令的安装使用
- Linux内存管理之mmap详解
- 每个程序员都应该知道的8个Linux命令
- CentOS下如何从vi编辑器插入模式退出到命令模式
- linux gz 解压缩
- 点评五款用于 Linux 编程的内存调试器
- 点评五款用于 Linux 编程的内存调试器
- git:Linux搭建服务器,windows客户端
- linux命令--定时删除linux下面的某目录下的日志文件
- Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver
- Linux驱动学习心得
- linux下samba4.1.6源代码部署及配置
- SUSE Linux 企业版的实时补丁将带来无中断的服务
- Linux新建用户误删除进入时su: warning: cannot change directory to /home/grid: No such file or director
- Linux---centos升级git版本
- (转) Weblogic 10完美破解(Linux和Windows都适用)
- centos 设置定时任务执行指定脚本
- CentOS 开机启动服务及自动联网
- CentOS 6.3图形界面自定义开启终端快捷键
- centos 下安装PHP框架 Phalcon