Linux gdb调试入门

  没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧!

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;

}

第一步:编译

[[email protected] CppProject]# g++ -g sum.cpp -o sum

查看下文件

第二步:使用gdb设置断点调试

[[email protected] 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
断点调试就这么多了,有兴趣的可以学习设置观察点,捕捉点调试。

时间: 2024-10-10 13:50:22

Linux gdb调试入门的相关文章

Linux GDB调试全面解析

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程

Linux gdb调试器用法全面解析

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程

Linux GDB调试C/C++项目

Linux 下运行C++项目中遇到Segmentation fault 这样的问题,往往不会有太多错误信息,通常需要GDB来调试 1.编译Debug版本 make debug 2.生成最新版本的core文件,如果有core文件,rm. ulimit -c unlimited -c 后面加的参数是: 1)使用ulimit -c命令可查看core文件的生成开关.若结果为0,则表示关闭了此功能,不会生成core文件. 2)使用ulimit -c filesize命令,可以限制core文件的大小(fil

[Linux]gdb调试

1 [email protected]:~/CodeLearn/HelloWorld/src$ g++ -g main.cpp 2 [email protected]:~/CodeLearn/HelloWorld/src$ ./a.out 3 Hello world!10 4 [email protected]:~/CodeLearn/HelloWorld/src$ gdb a.out 5 GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-20

Visual studio调试和在linux gdb调试的尝试

Visual studio调试: 定位代码    缩小调试范围    打断点     不断继续run    查看需要变量值与自己预期结果  判断哪里问题 #include "stdafx.h" #include <stdio.h> #include <string.h> const char* str[] = { "Hello","abc","applef","man","

gdb调试汇总

1. 启动GDB开始调试: (1)gdb program ///最常用的用gdb启动程序,开始调试的方式(2)gdb program core ///用gdb查看core dump文件,跟踪程序core的原因(3)gdb program pid ///用gdb调试已经开始运行的程序,指定pid即可 2. 应用程序带命令行参数的情况,可以通过下面两种方法启动: (1)启动GDB的时候,加上–args选项,然后把应用程序和其命令行参数带在后面,具体格式为:gdb –args program args

ubuntu: qemu+gdb 调试linux kernel 学习笔记

声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ------------------------------------------------------------------------------------------------分割线-----------------------------------------------------------

Linux知识(5)----LINUX下GDB调试

参考资料: 1.LINUX下GDB调试

linux内核调试技术之GDB和GDBServer

1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDBServer发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作. 2.安装GDB和GDBServer(gdb-7.4.tar.bz2 ) 2.1.GDB 1.下载: http://ftp.gnu.org/gnu/gdb/ 2.解压:tar xvf g