gdb介绍及命令

本文详细介绍了GDB,一个GNU开源的UNIX下程序调试工具,涵盖了启动程序、设置断点、检查状态和动态修改环境等功能,以及如何在C++项目中使用GDB进行调试的实例和技巧。
摘要由CSDN通过智能技术生成
  1. gdb概述

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、动态的改变你程序的执行环境。

一个调试demo:

test.cpp

#include "test.h"

int max(int *arrint len)

{

    int max = *arr;

    for(int i = 0i < leni++)

    {

        if(*(arr+i) > max)

        {

            max = *(arr + i);

        }

    }

    return max;

}

int min(int *arrint len)

{

    int min = *arr;

    for(int i = 0i < leni++)

    {

        if(*(arr+i) < min)

        {

            min = *(arr + i);

        }

    }

    return min;

}

main.cpp

#include<iostream>

#include "test.h"

using namespace std;

int main()

{

    int nm;

    int arr[10] = {0,1,2,3,4,5,6,7,8,9};

    

    for(int j = 0j < 10j++)

    {

        cout << arr[j]<< endl;

    }

    cout <<  "max is = " << (m = max(arrsizeof(arr)/sizeof(arr[0]))) << "  ";

    cout << "min is = " << (n = min(arrsizeof(arr)/sizeof(arr[0]))) << endl;;

    return 0;

}

编译生成执行文件:(Linux 下)

[455334@yanfa211_centos6-jk128:weops test]$ g++ -g *.cpp -o test   (注意这里要加-g)

使用 GDB 调试:

[455334@yanfa211_centos6-jk128:weops test]$ gdb test

(gdb) l <-------------------- l 命令相当于 list,从第一行开始例出原码。

(gdb) <-------------------- 直接回车表示,重复上一次命令

(gdb) b 14 <-------------------- 设置断点,在源程序第 14 行处。

(gdb) b max <-------------------- 设置断点,在函数 max()入口处。

(gdb) info b <-------------------- 查看断点信息。

(gdb) r <--------------------- 运行程序,run 命令简写

(gdb) n <--------------------- 单条语句执行,next 命令简写。

(gdb) s <--------------------- 单步语句执行,step命令简写。

(gdb) c <--------------------- 继续运行程序,continue 命令简写。

(gdb) p i <--------------------- 打印变量 i 的值,print 命令简写。

(gdb) bt <--------------------- 查看函数堆栈。

(gdb) finish <--------------------- 退出函数。

(gdb) c <--------------------- 继续运行。

(gdb) q <--------------------- 退出 gdb。

启动 GDB 的方法有以下几种:

  1. gdb program 也就是你的执行文件,一般在当然目录下。

例如:gdb test

  1. gdb <program> core

用 gdb 同时调试一个运行程序和 core 文件,core 是程序非法执行后 core dump 后产生的文件。

例如:gdb test core.620

  1. gdb <program> <PID>

如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb 会自动 attach 上去,并调试他。program 应该在 PATH 环境变量中搜索得到。

调试已经运行的程序两种方法:

1. 在 UNIX 下用 ps 查看正在运行的程序的 PID(进程 ID),然后用 gdb

<program> PID 格式挂接正在运行的程序。(ps aux或ps –ef查看进程)

2. 先用 gdb <program>关联上源代码,并进行 gdb,在 gdb 中用 attach

命令来挂接进程的 PID。并用 detach 来取消挂接的进程。

例如:

         gdb snake 402

或1.gdb snake 2.attach 402

GDB 启动时,可以加上一些 GDB 的启动开关,详细的开关可以用 gdb -help查看。

gdb的命令很多,gdb 把之分成许多个种类。help 命令只是例出 gdb 的命令种类,如果要看种类中的命令,可以使用 help <class> 命令,如:help breakpoints,查看设置断点的所有命令。也可以直接 help <command>来查看命令的帮助。

gdb 中,输入命令时,可以不用打全命令,只用打命令的前几个字符就可以了,当然,命令的前几个字符应该要标志着一个唯一的命令,在 Linux 下,你可以敲击两次TAB键来补齐命令的全称,如果有重复的,那么 gdb 会把其例出来。

调试 C++的程序时,可以函数名一样。如:

(gdb) b 'bubble( M-?

bubble(double,double) bubble(int,int)

(gdb) b 'bubble(

你可以查看到 C++中的所有的重载函数及参数。(注:M-?和“按两次 TAB 键”是一个意思)

要退出 gdb 时,只用发 quit 或命令简称 q 就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gidetimothy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值