首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

linux学习之gdb调试工具篇

2023-11-12 来源:华拓网

2.gdb的常用命令
  • help(h)———按模块列出命令类
  • help class——查看某一类型的具体命令
  • list(l)———查看代码,可跟行号和函数名
  • quit(q)———退出gdb
  • run(r)———-全速运行程序
  • start———–单步执行,运行程序,停在第一行执行语句
  • next(n)———逐过程执行
  • step(s)———逐语句执行,遇到函数,跳到函数内执行
  • backtrace(bt)–查看函数的调用的栈帧和层级关系
  • info(i)———查看GDB内部局部变量的数值,info breakpoints切换函数的栈帧。
  • finish———-结束当前函数,返回到函数调用点
  • set————-设置变量的值 set var n = 100
  • run argv[1] argv[2]–调试时命令行传参
  • print(p)——–打印变量和地址
  • break(b)——–设置断点,可根据行号和函数名
  • delete(d)——-删除断点d breakpoints NUM
  • display———设置观察变量
  • undisplay——-取消观察变量
  • continue(c)—–继续全速运行剩下的代码
  • enable breakpoints ——-启用断点
  • disable breakpoints——-禁用断点
  • x —————–查看内存 x /20xw 显示20个单元,16进制,4字节每单元
  • watch————被设置观察点的变量发生修改时,打印显示

  • i watch———-显示观察点

  • core文件———ulimit -c 1024 开启core文件,调试时gdb a.out core
  • 3.gdb调试模式
  • run全速运行
  • start 单步调试
  • set follow—fork -mode child#Makefile项目管理。设置跟踪模式,跟踪父进程或子进程。
  • linux学习之gdb调试工具篇

    标签:out   设计   var   验证   disable   原因   trace   取消   令行   

    小编还为您整理了以下内容,可能对您也有帮助:

    关于在Linux系统中的gdb命令知识

    在Linux系统中有许多的命令程序来辅助系统的正常和方便运行,那么其中在系统中有着一个叫做gdb命令的程序,那么我们今天就来了解下关于gdb命令的知识吧!
    一、常规调试
    gdb是Linux下常用的程序调试工具,当然前提是用gcc/g++编译时加上-g参数,这样编译出的可执行程序会加上gdb调试信息。
    gdb命令不少,但常用的主要包括如下命令:
    (1)list [file:]functuon
    命令缩写是l,查看源码,不加参数时,向下显示源码,加参数-l时,向上显示源码,默认显示10行。
    也可以设置在某个函数出列出源码,需要注意的是:如果是非成员函数则用file:function即可,如果是类成员函数则用class::functuon。
    (2)edit [file:]function
    命令缩写是e,编辑当前所在的行,也可以编辑某个函数的源码(规则同list)。
    (3)break [file:]function
    命令缩写是b,设置断点,可以设置在某行或某个函数处(规则同list),此外还可以直接用文件名:行号来设置断点。
    (4)info
    命令缩写是i,列表gdb子命令的信息,如:info break, info variables, info stack等。
    (5)run [arglist]
    命令缩写是r,运行程序至断点处停住,run命令之后可以加上调试程序需要的参数。
    (6)next
    命令缩写是n,单步调试执行语句,如果遇到函数也当一条单步语句而不进入函数,类似于VC中的F10。
    (7)step
    命令缩写是s,单步调试执行语句,如果遇到函数会直接进入函数内部,类似于VC中的F11。
    (8)continue
    名利缩写是c,继续运行程序至下一个断点。
    (9)what
    查看变量类型。
    (10)print
    命令缩写是p,打印变量的值。
    (11)backtrace
    命令缩写是bt,查看堆栈信息。
    (12)enter
    回车键,重复执行上一条调试命令。
    (13)help [name]
    显示指定的gdb命令的帮助信息。
    (14)quit
    命令缩写是q,退出gdb。
    gdb调试运行程序时,用gdb .exe加载程序,gdb调试core mp时,用gdb .exe .core加载程序,执行r命令可以开始运行程序。在gdb内编辑完代码后,不需要退出gdb,而直接在gdb里make即可,否则之前设置的断点等信息都付之一炬了。
    二、多线程调试
    (1)info threads
    命令缩写是info thr, 显示当前可调试的所有线程,每个线程会有一个gdb为其分配的ID,后面操作线程的时候会用这个ID,前面有*的是当前调试的线程。
    (2)thread ID
    命令缩写是thr,切换当前调试的线程为指定ID的线程。
    (3)thread apply ID1 ID2 command
    命令缩写规则同上,让一个或者多个线程执行gdb命令command。
    (4)thread apply all command
    命令缩写规则同上,让所有被调试线程执行gdb命令command。
    (5)set scheler-locking off|on|step
    在调试多线程程序时,使用step或者continue命令调试当前线程时,其它线程也在并发执行,这个命令可以通过off|on|step来控制线程的执行,即:
    off:不锁定任何线程,即所有线程都执行,这是默认值。
    on:只有当前被调试程序会被执行。
    step:在单步的时候,除了next过一个函数的情况以外,只有当前线程会执行。

    关于在Linux系统中的gdb命令知识

    在Linux系统中有许多的命令程序来辅助系统的正常和方便运行,那么其中在系统中有着一个叫做gdb命令的程序,那么我们今天就来了解下关于gdb命令的知识吧!
    一、常规调试
    gdb是Linux下常用的程序调试工具,当然前提是用gcc/g++编译时加上-g参数,这样编译出的可执行程序会加上gdb调试信息。
    gdb命令不少,但常用的主要包括如下命令:
    (1)list [file:]functuon
    命令缩写是l,查看源码,不加参数时,向下显示源码,加参数-l时,向上显示源码,默认显示10行。
    也可以设置在某个函数出列出源码,需要注意的是:如果是非成员函数则用file:function即可,如果是类成员函数则用class::functuon。
    (2)edit [file:]function
    命令缩写是e,编辑当前所在的行,也可以编辑某个函数的源码(规则同list)。
    (3)break [file:]function
    命令缩写是b,设置断点,可以设置在某行或某个函数处(规则同list),此外还可以直接用文件名:行号来设置断点。
    (4)info
    命令缩写是i,列表gdb子命令的信息,如:info break, info variables, info stack等。
    (5)run [arglist]
    命令缩写是r,运行程序至断点处停住,run命令之后可以加上调试程序需要的参数。
    (6)next
    命令缩写是n,单步调试执行语句,如果遇到函数也当一条单步语句而不进入函数,类似于VC中的F10。
    (7)step
    命令缩写是s,单步调试执行语句,如果遇到函数会直接进入函数内部,类似于VC中的F11。
    (8)continue
    名利缩写是c,继续运行程序至下一个断点。
    (9)what
    查看变量类型。
    (10)print
    命令缩写是p,打印变量的值。
    (11)backtrace
    命令缩写是bt,查看堆栈信息。
    (12)enter
    回车键,重复执行上一条调试命令。
    (13)help [name]
    显示指定的gdb命令的帮助信息。
    (14)quit
    命令缩写是q,退出gdb。
    gdb调试运行程序时,用gdb .exe加载程序,gdb调试core mp时,用gdb .exe .core加载程序,执行r命令可以开始运行程序。在gdb内编辑完代码后,不需要退出gdb,而直接在gdb里make即可,否则之前设置的断点等信息都付之一炬了。
    二、多线程调试
    (1)info threads
    命令缩写是info thr, 显示当前可调试的所有线程,每个线程会有一个gdb为其分配的ID,后面操作线程的时候会用这个ID,前面有*的是当前调试的线程。
    (2)thread ID
    命令缩写是thr,切换当前调试的线程为指定ID的线程。
    (3)thread apply ID1 ID2 command
    命令缩写规则同上,让一个或者多个线程执行gdb命令command。
    (4)thread apply all command
    命令缩写规则同上,让所有被调试线程执行gdb命令command。
    (5)set scheler-locking off|on|step
    在调试多线程程序时,使用step或者continue命令调试当前线程时,其它线程也在并发执行,这个命令可以通过off|on|step来控制线程的执行,即:
    off:不锁定任何线程,即所有线程都执行,这是默认值。
    on:只有当前被调试程序会被执行。
    step:在单步的时候,除了next过一个函数的情况以外,只有当前线程会执行。

    linux里面如何单步调试!

    一、GDB 概述

    GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。

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

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

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

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

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

    从上面看来, GDB 和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现 GDB 这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。

    二、一个调试示例

    源程序: tst.c

    [cpp] view plain copy

    #include <stdio.h>

    int func(int n)

    {

    int sum=0,i;

    for(i=0; i<n; i++)

    {

    sum+=i;

    }

    return sum;

    }

    int main()

    {

    int i;

    long result = 0;

    for(i=1; i<=100; i++)

    {

    result += i;

    }

    printf("result[1-100] = %d /n", result );

    printf("result[1-250] = %d /n", func(250) );

    }

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

    hchen/test> cc -g tst.c -o tst

    启动Gdb:

    以上是对于gdb的感性认识,接下来系统地认识一下 gdb 吧。

    三、使用 GDB

    1.基础

    一般来说 GDB 主要调试的是 C/C++ 的程序。要调试 C/C++ 的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器( cc/gcc/g++ )的 -g 参数可以做到这一点。如:

    > cc -g hello.c -o hello

    > g++ -g hello.cpp -o hello

    如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用 -g 把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用 gdb 来调试他。

    启动 gdb 后,就你被带入 gdb 的调试环境中,就可以使用 gdb 的命令开始调试程序了, gdb 的命令可以使用 help 命令来查看,

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

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

    2 GDB 中运行 UNIX 的 shell 程序

    在 gdb 环境中,你可以执行 UNIX 的 shell 的命令,使用 gdb 的 shell 命令来完成:

    shell <command string>

    调用 UNIX 的 shell 来执行 <command string> ,环境变量 SHELL 中定义的 UNIX 的 shell 将会被用来执行 <command string> ,如果 SHELL 没有定义,那就使用 UNIX 的标准 shell : /bin/sh 。(在 Windows 中使用 Command.com 或 cmd.exe )

    还有一个 gdb 命令是 make :

    make <make-args>

    可以在 gdb 中执行 make 命令来重新 build 自己的程序。这个命令等价于 “ shell make <make-args> ”

    3 在 GDB 中运行程序

    在 gdb 中,运行程序使用 r 或是 run 命令。程序的运行,你有可能需要设置下面四方面的事。

    1 、程序运行参数。

    set args 可指定运行时参数。(如: set args 10 20 30 40 50 )

    show args 命令可以查看设置好的运行参数。

    2 、运行环境。

    path <dir> 可设定程序的运行路径。

    show paths 查看程序的运行路径。

    set environment varname [=value] 设置环境变量。如: set env USER=hchen

    show environment [varname] 查看环境变量。

    3 、工作目录。

    cd <dir> 相当于 shell 的 cd 命令。

    pwd 显示当前的所在目录。

    4 、程序的输入输出。

    info terminal 显示你程序用到的终端的模式。

    使用重定向控制程序输出。如: run > outfile

    tty 命令可以指写输入输出的终端设备。如: tty /dev/ttyb

    显示全文