【嵌入式】gdb调试工具:用于调试 C、C++ 和其他编程语言编写的程序,支持设置断点、单步执行、变量查看、堆栈跟踪等

GNU 调试器(GDB)是一个强大的调试工具,用于调试 C、C++ 和其他编程语言编写的程序。本文将全面介绍 GDB 的安装、基本使用方法、高级功能以及 Core Dump 调试,帮助你掌握这一重要的调试工具。


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

在这里插入图片描述

1. GDB 简介

GDB 是 GNU 项目开发的调试器,支持多种编程语言,包括 C、C++、Fortran 等。GDB 提供了丰富的调试功能,如断点设置、单步执行、变量查看、堆栈跟踪等,使开发者能够高效地发现和修复程序中的错误。

2. 安装 GDB

2.1 在 Linux 上安装

在大多数 Linux 发行版上,可以通过包管理器安装 GDB。例如,在 Debian/Ubuntu 系统上,可以使用以下命令:

sudo apt update
sudo apt install gdb

在 Fedora 系统上,可以使用以下命令:

sudo dnf install gdb

2.2 在 macOS 上安装

在 macOS 系统上,可以使用 Homebrew 来安装 GDB。首先,确保你已经安装了 Homebrew,然后执行以下命令:

brew install gdb

安装完成后,需要对 GDB 进行签名以获得调试权限。创建一个新的代码签名证书,并将其应用到 GDB:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /usr/local/etc/gdb-cert.crt
codesign -s gdb-cert /usr/local/bin/gdb

2.3 在 Windows 上安装

在 Windows 系统上,可以使用 MinGW-w64 安装 GDB。首先,下载并安装 MinGW-w64,然后打开 MinGW-w64 Shell,执行以下命令:

pacman -S mingw-w64-x86_64-gdb

3. GDB 的基本使用

3.1 启动 GDB

可以通过在终端中输入 gdb 命令启动 GDB,并指定要调试的可执行文件:

gdb myprogram

3.2 设置断点

断点是调试过程中用于暂停程序执行的点。可以使用 break 命令设置断点:

(gdb) break main

还可以在指定的行号或函数名处设置断点:

(gdb) break 42
(gdb) break myfunction

3.3 运行程序

使用 run 命令运行程序:

(gdb) run

3.4 查看变量

使用 print 命令查看变量的值:

(gdb) print myvar

还可以使用 display 命令在每次停止时自动显示变量的值:

(gdb) display myvar

3.5 单步执行

使用 next 命令单步执行程序,跳过函数调用:

(gdb) next

使用 step 命令单步执行程序,进入函数调用:

(gdb) step

4. GDB 的高级功能

4.1 条件断点

可以设置条件断点,使断点只在特定条件满足时触发:

(gdb) break myfunction if myvar == 42

4.2 观察点

观察点用于在变量的值发生变化时暂停程序执行。使用 watch 命令设置观察点:

(gdb) watch myvar

4.3 堆栈跟踪

使用 backtrace 命令查看当前的堆栈跟踪:

(gdb) backtrace

4.4 调试多线程程序

GDB 支持调试多线程程序。使用 info threads 命令查看所有线程:

(gdb) info threads

使用 thread 命令切换到指定线程:

(gdb) thread 2

4.5 远程调试

GDB 支持远程调试,可以调试运行在其他机器上的程序。使用 target remote 命令连接到远程目标:

(gdb) target remote hostname:port

5. Core Dump 调试

Core Dump 是程序崩溃时生成的内存快照文件,包含了程序在崩溃时的状态信息。通过分析 Core Dump 文件,可以帮助开发者定位和修复程序中的错误。

5.1 Core Dump 的生成

在大多数 Linux 系统上,可以通过以下命令启用 Core Dump 生成:

ulimit -c unlimited

运行上述命令后,当程序崩溃时,系统会生成一个 Core Dump 文件。默认情况下,Core Dump 文件会生成在当前工作目录下,文件名通常为 corecore.<pid>

5.2 使用 GDB 调试 Core Dump

使用 GDB 打开 Core Dump 文件,并加载相应的可执行文件:

gdb myprogram core

加载 Core Dump 文件后,可以使用 GDB 的各种命令来分析程序崩溃时的状态。例如,使用 backtrace 命令查看堆栈跟踪:

(gdb) backtrace

还可以查看变量的值、设置断点、单步执行等,就像调试正在运行的程序一样。

6. GDB 脚本化

6.1 GDB 命令文件

可以将 GDB 命令保存到文件中,并在启动 GDB 时加载该文件:

gdb -x commands.gdb myprogram

6.2 GDB Python API

GDB 提供了 Python API,可以编写 Python 脚本来扩展 GDB 的功能。例如,以下是一个简单的 Python 脚本,用于在每次停止时打印当前堆栈帧的函数名:

import gdb

class PrintFunctionName(gdb.Command):
    def __init__(self):
        super(PrintFunctionName, self).__init__("print-func-name", gdb.COMMAND_USER)

    def invoke(self, arg, from_tty):
        frame = gdb.selected_frame()
        print("Current function:", frame.name())

PrintFunctionName()

将上述代码保存到文件中,然后在 GDB 中使用 source 命令加载该文件:

(gdb) source myscript.py

7. GDB 常见问题及解决方法

问题一:无法设置断点

如果 GDB 无法设置断点,可能是因为可执行文件没有包含调试信息。请确保在编译时使用了 -g 选项:

gcc -g -o myprogram myprogram.c

问题二:GDB 无法启动或崩溃

如果 GDB 无法启动或崩溃,尝试更新 GDB 版本或重新安装 GDB。

8. 总结

本文详细介绍了 GDB 的安装、基本使用方法、高级功能以及 Core Dump 调试。通过阅读本文,你应该已经掌握了如何使用 GDB 进行调试,发现和修复程序中的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

I'mAlex

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

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

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

打赏作者

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

抵扣说明:

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

余额充值