嵌入式Linux调试工具gdb

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1449516487/article/details/83896833

1.简介

gdb调试工具是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也是足以与微软Visual Studio等工具媲美的。

2.gdb使用流程

(1)首先编辑一段c代码,如下所示:

/*test.c*/
#include <stdio.h>
int sum(int );
int main()
{
    int i,n = 0;
    sum(50);
    for(i=1;i<=50;i++)
    {
        n += i;
    }
    printf("Then sum for 1-50 is %d\n",n);
}
int sum(int m)
{
    int i,n = 0;
    for(i=1;i<=m;i++)
    {
        n += i;
    }
    printf("Then sum of 1-m is %d\n",n);
}

(2)编译命令:gcc -g test.c -o test(注意:一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件)

(3)启动gdb命令:gdb test(注意:test是可执行文件,不是c文件test.c)

(4)查看文件:在gdb中键入“l”或“list”,gdb会显示行号

(5)设置断点:在gdb中键入“b 8”或“break 8”,表示在第8行设置断点

(6)查看断点:在gdb中键入“info b”,表示查看设置的所有断点

(7)运行代码:在gdb中键入“r”或“run”,运行代码后,代码停留在先前设置的断点处

(8)查看变量值:在gdb中键入“p n”或“print n”,表示查看变量n的值

(9)单步运行:在gdb中键入“n”(next)或“s”(step)都表示单步运行,两者的区别在于“s”会进入函数而“n”不会进入函数,类似于Visual C++的“step in”和“step over”

(10)恢复程序运行:在gdb中键入“c”或“continue”,表示程序继续运行

3.gdb基本命令

(1)工作环境相关命令

gdb中不仅可以调试所运行的程序,而且还可以对程序相关的工作环境进行相应的设定,甚至还可以使用shell中的命令进行相关的操作。

gdb工作环境相关命令
命令格式 含义
set args运行时的参数 指定运行时参数,如set args 2
show args 查看设置好的运行参数
path dir 设定程序的运行路径
show paths 查看程序的运行路径
set enviroment var [=value] 设置环境变量
show enviroment [var] 查看环境变量
cd dir 进入dir目录,相当于shell中的cd命令
pwd 显示当前工作目录
shell command 运行shell的command命令

(2)设置断点与恢复命令

gdb设置断点与恢复相关命令
命令格式 含义
info b 查看所设断点
break [文件名:] 行号或函数名 <条件表达式> 设置断点
tbreak [文件名:] 行号或函数名 <条件表达式> 设置临时断点,到达后被自动删除
delete [断点号] 删除指定断点,其断点号为“info b”中的第一栏。若默认断点号则删除所有断点
disable [断点号] 停止指定断点,使用“info b”仍能查看此断点。同delete一样,若默认断点号则停止所有断点
enable [断点号] 激活指定断点,即激活被disable停止的端点
condition [断点号] <条件表达式> 修改对应端点的条件
ignore [断点号] <num> 在程序执行中,忽略对应断点num次
step 单步恢复程序运行,且进入函数调用

next

单步恢复程序运行,但不进入函数调用
finish 运行程序,直到当前函数完成返回
c 继续执行函数,直到函数结束或遇到新的断点

两种设置断点的方法:

①函数断点:gdb中按行数设置断点只需要把函数名列在命令“b”之后,如下所示:

②条件断点:gdb中设置条件断点的格式为:b 行数或函数名if表达式

(3)gdb中源码查看相关命令

gdb源码查看相关命令
命令格式 含义
list <行号>|<函数名> 查看指定位置代码
file [文件名] 加载指定文件
forward-search 正则表达式 源代码的前向指定文件
reverse-search 正则表达式 源代码的后向指定文件
dir DIR 将路径DIR添加到源文件搜索的路径的开头
show directories 显示源文件的当前搜索路径

info line

显示加载到gdb内存中的代码

(4)gdb中查看运行数据相关命令

gdb中查看运行数据是指当前程序处于“运行”或“暂停”状态时,可以查看的变量及表达式的信息。

命令格式 含义
print 表达式|变量 查看程序运行时对应表达式和变量的值
x <n/f/u> 查看内存变量内容。其中n为整数表示显示内存的长度,f表示显示的格式,u表示从当前地址往后请求显示的字节数
display 表达式 设定在单步运行或其他情况中,自动显示的对应表达式的内容
backtrace 查看当前栈的情况,即可以查到哪些被调用的函数尚未返回

(5)gdb中修改运行参数相关命令

gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set var 变量=设定值”。这样,在此之后,程序就会按照该设定的值运行了。

猜你喜欢

转载自blog.csdn.net/q1449516487/article/details/83896833