`
unsoundboy
  • 浏览: 63287 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

GDB调试

阅读更多
1 GDB 命令行参数

启动 GDB:

    * gdb executable
    * gdb -e executable -c core-file
    * gdb executable -pid process-id
      (使用命令 'ps -auxw' 可以查看进程的 pid)

    选项 含义
    --help
    -h 列出命令行参数。
    --exec=file
    -e file 指定可执行文件。
    --core=core-file
    -c core-file 指明 core 文件。
    --command=file
    -x file 从指定文件中读取 gdb 命令。
    --directory=directory
    -d directory 把指定目录加入到源文件搜索路径中。
    --cd=directory 以指定目录作为当前路径来运行 gdb 。
    --nx
    -n 不要执行 .gdbinit 文件中的命令。默认情况下,这个文件中的命令会在所有命令行参数处理完后被执行。
    --batch 在非交互模式下运行 gdb 。从文件中读取命令,所以需要 -x 选项。
    --symbols=file
    -s file 从指定文件中读取符号表。
    -write 允许对可执行文件和 core 文件进行写操作。
    --quiet
    -q 不要打印介绍和版权信息。
    --tty=device 指定 device 为运行程序的标准输入输出。
    --pid=process-id
    -p process-id
    指定要附属的进程 ID 。

2 GDB 命令

GDB 中使用的命令:

    命令 描述
    help 列出 gdb 帮助信息。
    help topic 列出相关话题中的 gdb 命令。
    help command 列出命令描述信息。
    apropos search-word 搜索相关的话题。
    info args
    i args 列出运行程序的命令行参数。
    info breakpoints 列出断点。
    info break 列出断点号。
    info break breakpoint-number 列出指定断点的信息。
    info watchpoints 列出观察点。
    info registers 列出使用的寄存器。
    info threads 列出当前的线程。
    info set 列出可以设置的选项。
    Break and Watch
    break funtion
    break line-number 在指定的函数,或者行号处设置断点。
    break +offset
    break -offset 在当前停留的地方前面或后面的几行处设置断点。
    break file:func 在指定的file文件中的func处设置断点。
    break file:nth 在指定的file文件中的第nth行设置断点。
    break *address 在指定的地址处设置断点。一般在没有源代码时使用。
    break line-number if condition 如果条件满足,在指定位置设置断点。
    break line thread thread-number 在指定的线程中中断。使用info threads可以显示线程号。
    tbreak 设置临时的断点。中断一次后断点会被删除。
    watch condition 当条件满足时设置观察点。
    clear
    clear func
    clear nth 清除函数func处的断点。
    清除第nth行处的断点。
    delete
    d 删除所有的断点或观察点。
    delete breakpoint-number
    delete range 删除指定的断点,观察点。
    disable breakpoint-number-or-range
    enable breakpoint-number-or-range 不删除断点,仅仅把它设置为无效,或有效。
    例子:
    显示断点: info break
    设置无效: disable 2-9
    enable once breakpoint-number 设置指定断点有效,当到达断点时置为无效。
    enable del breakpoint-number 设置指定断点有效,当到达断点时删除它。
    finish 继续执行到函数结束。
    Line Execution
    step
    s
    step number-of-steps-to-perform 进入下一行代码的执行,会进入函数内部。
    next
    n
    next number 执行下一行代码。但不会进入函数内部。
    until
    until line-number 继续运行直到到达指定行号,或者函数,地址等。
    return
    return expression 弹出选中的栈帧(stack frame)。如果后面指定参数,则返回表达式的值。
    stepi
    si
    nexti
    ni 执行下一条汇编/CPU指令。
    info signals
    info handle
    handle SIGNAL-NAME option 当收到信号时执行下列动作:nostop(不要停止程序),stop(停止程序执行),print(显示信号),noprint(不显示),pass/noignore(允许程序处理信号),nopass/ignore(不让程序接受信号)
    where 显示当前的行号和所处的函数。
    Program Stack
    backtrace
    bt
    bt inner-function-nesting-depth
    bt -outer-function-nesting-depth 显示当前堆栈的追踪,当前所在的函数。
    backtrace full 打印所有局部变量的值。
    frame number
    f number 选择指定的栈帧。
    up number
    down number 向上或向下移动指定个数的栈帧。
    info frame addr 描述选中的栈帧。
    info args
    info all-reg
    info locals
    info catch 显示选中栈帧的参数,局部变量,异常处理函数。all-reg也会列出浮点寄存器。
    Source Code
    list
    l
    list line-number
    list function
    list -
    list start#,end#
    list filename:function 列出相应的源代码。
    set listsize count
    show listsize 设置list命令打印源代码时的行数。
    directory directory-name
    dir directory-name
    show directories 在源代码路径前添加指定的目录。
    directory 当后面没有参数时,清除源代码目录。
    Examine Variables
    print variable
    p variable
    p file::variable
    p 'file'::variable 打印指定变量的值。
    p *array-var@length 打印arrary-var中的前length项。
    p/x var 以十六进制打印整数变量var。
    p/d var 把变量var当作有符号整数打印。
    p/u var 把变量var作为无符号整数打印。
    p/o var 把变量var作为八进制数打印。
    p/t var
    x/b address
    x/b &variable 以整数二进制的形式打印var变量的值。
    p/c variable 当字符打印。
    p/f variable 以浮点数格式打印变量var。
    p/a variable 打印十六进制形式的地址。
    x/w address
    x/4b &variable 打印指定的地址,以四字节一组的方式。
    call expression 类似于print,但不打印 void 。
    disassem addr 对指定地址中的指令进行反汇编。
    Controlling GDB
    set gdb-option value 设置 GDB 的选项。
    set print array on
    set print array off
    show print array 以可读形式打印数组。默认是 off 。
    set print array-indexes on
    set print array-indexes off
    show print array-indexes 打印数组元素的下标。默认是 off 。
    set print pretty on
    set print pretty off
    show print pretty 格式化打印 C 结构体的输出。
    set print union on
    set print union off
    show print union 打印 C 中的联合体。默认是 on 。
    set print demangle on
    set print demangle off
    show print demangle 控制 C++ 中名字的打印。默认是 on 。
    Working Files
    info files
    info share 列出当前的文件,共享库。
    file file 把file当作调试的程序。如果没指定参数,丢弃。
    core file 把file当作 core 文件。如果没指定参数,则丢弃。
    exec file 把file当作执行程序。如果没指定参数,则丢弃。
    symbol file 从file中读取符号表。如果没指定参数,则丢弃。
    load file 动态链入file文件,并读取它的符号表。
    path directory 把目录directory加入到搜索可执行文件和符号文件的路径中。
    Start and Stop
    run
    r
    run command-line-arguments
    run < infile > outfile 从头开始执行程序,也允许进行重定向。
    continue
    c 继续执行直到下一个断点或观察点。
    continue number 继续执行,但会忽略当前的断点number次。当断点在循环中时非常有用。
    kill 停止程序执行。
    quit
    q 退出 GDB 调试器。

3 GDB 操作提示

    * 在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。
    * 不要使用编译器的优化选项,比如: "-O","-O2"。因为编译器会为了优化而改变程序流程,那样不利于调试。
    * 在 GDB 中执行 shell 命令可以使用:shell command
    * GDB 命令可以使用 TAB 键来补全。按两次 TAB 键可以看到所有可能的匹配。
    * GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints。
    * GDB 在 Emacs 中的操作:

emacs 按键 动作
M-x gdb 切换到 gdb 模式。
C-h m 显示 gdb 模式介绍信息。
M-s 等同于gdb 中的 step 命令。
M-n 等同于gdb 中的 next 命令。
M-i 等同于gdb 中的 stepi 命令。
C-c C-f 等同于gdb 中的 finish 命令。
M-c 等同于gdb 中的 continue 命令。
M-u 等同于gdb 中的 up 命令。
M-d 等同于gdb 中的 down 命令。
分享到:
评论

相关推荐

    STM32 GDB调试手册

    STM32 GDB 调试手册 本手册详细介绍了如何使用 GDB 调试 STM32 微控制器,旨在帮助开发者快速掌握 GDB 调试工具的使用方法,以便更好地 debug STM32 项目。 标题解释 STM32 GDB 调试手册是 STM 官方提供的调试指南...

    用GDB调试程序(整理有书签).pdf

    陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...

    GDB调试手册(中文版)

    GDB调试手册是一份非常适合初学者的中文资源,它详尽地介绍了如何使用GDB这一强大的开源调试工具。GDB,全称GNU调试器,是Linux和其他类Unix系统下用于调试C、C++、Objective-C、Fortran等语言编写的程序的工具。...

    gdb调试 rk可运行程序

    标题"**gdb调试 RK可运行程序**"指出了我们将在AArch64架构上使用GDB来调试针对Rockchip处理器设计的程序。这通常涉及到嵌入式设备或高性能计算平台,因为Rockchip芯片常见于这些领域。在AArch64架构下,GDB的使用...

    GDB调试程序[陈皓]&GDB调试工具指南

    《GDB调试程序[陈皓]》与《GDB调试工具指南》这两份PDF文档,是深入了解和精通GDB(GNU Debugger)这一强大调试工具的重要参考资料。GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行...

    Linux课件:GDB调试简明指南.pdf

    Linux 调试工具 GDB 简明指南 GDB(GNU Debugger)是 Linux 系统中的一款强大调试工具,用于调试 C 和 C++ 程序。它使用户可以在程序运行时观察程序的内部结构和内存的使用情况。GDB 提供了多种功能,如监视程序中...

    用GDB调试程序 用GDB调试程序

    GDB 调试程序 GDB 是一个强大的命令行调试工具,主要帮忙用户完成四个方面的功能:启动程序、设置断点、检查程序状态和动态改变程序执行环境。GDB 的强大之处在于其可以形成执行序列,形成脚本,非常容易集成在一起...

    GDB调试--以汇编语言为例

    "GDB调试--以汇编语言为例" 本文将详细介绍如何使用GDB调试汇编语言程序,包括使用CPUID指令来获取CPU信息,并使用GDB调试器来调试汇编语言程序。 一、CPUID指令 CPUID指令是Intel Pentium级别以上CPU中的一个...

    gdb调试详解 讲述如何使用gdb调试以及调试core dump

    gdb调试详解 GDB(GNU Debugger)是一款功能强大的调试工具,广泛应用于Linux平台。通过GDB,可以轻松地调试程序,检查程序崩溃后的核心转储文件(Core Dump),从而帮助开发者快速定位和解决问题。 GDB基础命令 ...

    Linux下gdb调试工具指南

    ### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是对于系统级编程和复杂应用的维护,一个高效、功能全面的调试工具是不可或缺的。GNU调试器(GDB)正是这样一款强大的调试工具,它...

    Linux GDB调试文档

    总结来看,一个合格的Linux C/C++后台开发者应该掌握GDB调试技术,利用这一强大的工具来增强开发过程中的问题诊断和解决能力。GDB的版本不断更新,其功能也在不断增强,例如在*.*.*.**版本中,特别强调了对多线程和...

    GDB--gdb调试.pdf

    **知识点详解:GDB调试工具入门与进阶** 在IT行业,尤其是软件开发领域,调试是确保代码质量、提升程序稳定性的重要环节。GDB(GNU Debugger)作为一款强大的开源源码级调试器,在Linux和Unix系统中占据着举足轻重...

    GDB调试应用指南Guide.pdf

    在介绍GDB调试程序的方法前,了解如何判断程序是否包含调试信息是第一步。 通常情况下,想要使用GDB调试C语言程序,需要在编译时添加-g参数来保留调试信息。如果不确定某个程序是否包含了调试信息,可以通过gdb命令...

    GDB 调试 中文手册

    GDB 调试中文手册 GDB(GNU Debugger)是一款功能强大且广泛使用的 UNIX 下的程序调试工具。它提供了多种功能,包括启动程序、设置断点、观察点和捕捉点、维护停止点、停止条件维护、为停止点设定运行命令、恢复...

    gdb调试标准教程gdb学习必备

    这篇教程是学习GDB调试的重要资源,适合嵌入式开发人员使用,因为它能够帮助理解并解决程序中的错误和问题。 GDB的基本功能包括: 1. **启动程序**:你可以通过GDB来启动你的程序,并根据需要定制运行参数,如传入...

    gdb调试(个人收集的丰富的GDB调试资料)

    ### GDB调试详解 #### GDB概述 GDB(GNU Debugger)是一款由GNU项目开发的开源调试工具,专为UNIX及类UNIX系统设计。对于在UNIX环境下进行软件开发的工程师而言,GDB提供了超越图形界面调试器的强大功能,如Visual...

    gdb调试器的使用,gdb

    ### gdb调试器的使用 #### 一、简介与安装 GDB(GNU Debugger)是一款功能强大的开源调试工具,主要用于在Linux环境下对C/C++程序进行调试。它支持多种类型的调试操作,包括设置断点、单步执行、查看内存变量状态...

Global site tag (gtag.js) - Google Analytics