C++ 程序在 Linux 下如何调试:GDB 入门流程讲清楚

蓝鲸
蓝鲸
发布时间:2026-08-24| 141人浏览过
原创

前言

在 Linux 下排查 C++ 程序问题,很多人会卡在“命令会用,但不知道先看哪一步”。这篇文章按 GDB 的实际使用顺序梳理流程,帮助你判断编译、断点、单步和调用栈各自该在什么场景下使用。

在 Linux 下排查 C++ 程序问题,很多人一开始会被命令行调试劝退,尤其是不清楚该先做什么、卡住后又该看什么。其实只要把 GDB 的基本流程串起来,先准备调试信息,再学会断点、单步和调用栈查看,绝大多数入门级问题都能有据可查。

先确认程序是否带有调试信息

在 Linux 下调试 C++ 程序,最常用的工具之一就是 GDB(GNU 调试器)。不过在启动调试器之前,第一件事不是直接运行 gdb,而是确认编译时加入了 -g 选项。这个选项会把调试信息写进可执行文件,后面你在 GDB 里查看代码位置、变量内容和调用关系时,才有足够的信息可用。

示例命令如下:

g++ -g -o myprogram myprogram.cpp

这一步是整个调试流程的基础。如果忘了加 -g,GDB 仍然可以启动程序,但很多定位问题时最关键的上下文会缺失,调试体验会差很多。

启动 GDB,并在可疑位置停住程序

完成编译后,就可以把目标程序交给 GDB:

GDB 调试基础流程图,展示从带 -g 编译到启动程序、设置断点和运行的顺序
GDB 调试启动流程把 GDB 入门流程拆成几步后,更容易理解每条命令各自负责什么。
gdb myprogram

进入 GDB 之后,最常见的做法是先设置断点。断点的作用是让程序运行到某个位置时暂停,这样你就不用靠猜测去判断问题发生在哪一步。

如果你怀疑 main.cpp 的第 10 行存在异常,可以这样设置断点:

break main.cpp:10

设置完成后,用下面的命令启动程序:

run

程序会正常执行,直到命中断点时停下来。对于初学者来说,这一步很关键,因为它把“程序跑错了”变成了“程序停在了一个具体位置”,后续观察变量和执行路径就有了落点。

查看变量值,区分 step 和 next 的使用场景

当程序在断点处暂停后,接下来通常要回答两个问题:当前数据对不对,以及这一行之后程序会怎么走。GDB 针对这两个问题分别提供了变量查看和单步执行命令。

查看变量值时,可以直接使用:

print variable_name

这条命令适合用来确认某个变量在当前时刻的真实值,尤其是在你怀疑判断条件、循环次数或函数参数有误时特别有用。

如果需要一行一行往下跟,可以使用两个最常见的单步命令:

step
next

step 会进入当前行调用到的函数内部,适合追查更深层的逻辑;next 则在当前层级继续执行,不进入函数体,更适合先看主流程是否正常。很多情况下,这两个命令配合使用,就能较快缩小问题范围。

如果当前位置没有异常,只是想让程序继续往后跑,到下一个断点或者程序结束,可以执行:

continue

程序崩溃时,用调用栈快速回溯

有些问题并不会在你预设的断点附近暴露,而是直接表现为程序崩溃,或者某个函数链条走偏了。这时候,最值得先看的通常不是单个变量,而是当前到底处在怎样的调用路径里。

GDB 运行中常用命令对比图,说明 print、step、next、backtrace 各自解决的问题
运行中命令怎么分工变量查看、单步跟踪和调用栈回溯分别回答的是不同类型的问题。

GDB 提供的 backtrace 命令可以打印当前调用栈:

backtrace

它能帮助你看到程序当前执行到了哪个函数、这个函数又是被谁调用进来的。遇到崩溃、异常返回或者多层函数嵌套时,调用栈往往比盯着某一行代码更快暴露问题范围。

调试结束后,可以用下面的命令退出 GDB:

quit

如果只是入门使用,上面这一组命令已经覆盖了日常调试中的大部分需求。后续还可以继续了解条件断点、观察点和内存检查等更高级的能力,也可以直接查阅 man gdb。先把“带 -g 编译、下断点、看变量、做单步、查调用栈”这条主线练熟,排查 C++ Bug 时就会更有把握。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。