个人主页:chian-ocean

文章专栏

前言

GDB(GNU Debugger) 是一个功能强大且灵活的 Linux 下的调试工具,广泛用于调试 C/C++ 以及其他程序语言的程序。它能够帮助开发者检查代码、分析程序崩溃、设置断点、查看变量值以及跟踪程序执行过程。下面我将详细介绍 GDB 的功能、基本用法以及一些常用命令。

在这里插入图片描述

GDB 介绍

定义:GDB,全称 GNU Debugger,是一个用于调试可执行程序的工具,支持多个编程语言,主要是 C 和 C++。它提供对程序的逐行跟踪、设置断点、检查变量等功能,帮助开发者找出程序中的错误。

主要功能

  1. 设置断点:可以在指定的行、函数或条件下设置断点,程序运行到断点时会暂停,方便检查程序状态。
  2. 单步执行:可以逐行运行程序,观察每一行代码的执行效果。
  3. 查看变量值:可以查看变量的当前值,以判断程序的状态。
  4. 堆栈跟踪:当程序崩溃时,可以查看函数调用栈,找出导致错误的源头

release和debug

特性Debug 版本Release 版本
调试信息含有详细的调试信息,可以逐行调试无调试信息,难以逆向或逐行调试
代码优化不进行优化,保持代码结构易于调试进行多重优化,代码结构不易读
文件大小大,包含调试符号和额外信息小,经过优化并剥离调试信息
运行速度慢,缺乏优化快,经过优化,提高了执行效率
使用场景开发阶段,调试和单元测试发布给用户,性能测试和实际使用

启动 GDB

可以通过以下方式启动 GDB:

gdb my_program
  • 启动后进入调试模式:GDB 提供了一个交互式的命令行界面,你可以输入各种命令来操作调试。

在这里插入图片描述

常用 GDB 命令

调试代码

#include <stdio.h>

int factorial(int n) {
    if (n == 1)
        return 1;
    return n * factorial(n - 1);
}

int main() {
    int num = 5;
    int result = factorial(num);
    printf("Factorial of %d is %d\n", num, result);
    return 0;
}

启动调试:

r (run) 

设置断点:

b (break)

在特定行或函数处设置断点。例如:

break main
break 20  # 在本文件的第 20 行设置断点

在这里插入图片描述

查看信息

info b (information break)

在这里插入图片描述

  • info locals

    • 查看当前函数中所有局部变量的值。
    info locals
    

    在这里插入图片描述

  • info registers

    • 查看当前寄存器的内容,这对分析汇编代码和优化可能有帮助

查看变量和表达式

p (print) <变量名/表达式>

在这里插入图片描述

display:用于在每次暂停时自动显示某个变量的值:

display x

在这里插入图片描述

单步调试

step (缩写 s)类比vs F11

  • 单步执行代码。如果当前语句是一个函数调用,则进入函数内部。
s (step)

next (缩写 n)类比vs F10

  • 单步执行代码。如果当前语句是一个函数调用,则直接执行该函数,而不进入函数内部。
n (next)

继续执行程序

  • continue (缩写 c):、

    继续执行程序直到下一个断点或者程序结束。

c (continue)

查看调用栈

  • backtrace (缩写 bt):

    查看当前的调用堆栈,显示每一层调用的函数、文件和行号。这在程序崩溃时尤其有用,可以帮助找出问题的源头。

bt (backtrace)

在这里插入图片描述

删除断点

  • delete
d (delete) <断点编号>

删除特定的断点。例如,删除编号为 1 的断点:

d (delete) 1

退出 GDB

  • quit (缩写 q):

退出 GDB。

quit

总结

  • GDB 是一个非常强大的调试工具,能帮助开发人员快速找出程序中的问题。
  • 通过 断点设置单步执行查看变量值调用栈分析 等功能,开发人员可以深入了解程序的运行情况。
  • 练习调试技巧 对于开发人员来说非常重要,熟练掌握 GDB 能够大大提高解决问题的能力和效率。

t


# **总结**

* **GDB** 是一个非常强大的调试工具,能帮助开发人员快速找出程序中的问题。
* 通过 **断点设置**、**单步执行**、**查看变量值**、**调用栈分析** 等功能,开发人员可以深入了解程序的运行情况。
* **练习调试技巧** 对于开发人员来说非常重要,熟练掌握 GDB 能够大大提高解决问题的能力和效率。

GDB 的命令较多,建议开发人员在日常编写和调试代码时经常使用这些命令,熟悉这些工具会让你对代码更加理解透彻,同时也能更快解决问题。
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐