在 Linux 中调试 C++ 程序

Posted

技术标签:

【中文标题】在 Linux 中调试 C++ 程序【英文标题】:Debug C++ program in Linux 【发布时间】:2008-12-16 07:08:22 【问题描述】:

我写了一个像这样的简单 C++ 程序:

#include <iostream>
using namespace std;
int main()

    cout << "Hello.";
    return 0;

现在我想调试它。那么它的命令是什么,以便我控制每一行?

【问题讨论】:

本教程说如何通过 6 个简单的步骤进行调试 thegeekstuff.com/2010/03/debug-c-program-using-gdb 你不必这样做,你的程序没有错误。 我知道这是个玩笑,但我不喜欢调试器将重点放在消除错误上。调试器使我们能够以仅通过检查代码无法实现的方式理解程序。 【参考方案1】:

您可以为此使用gdb

$ gdb hello

这将启动gdb 并提示您下一步该做什么。 next 命令执行一行源码并在下一行停止。

我找到了一个基本的GDB tutorial 可能会有所帮助。

【讨论】:

【参考方案2】:

不要忘记使用 -g 选项编译源代码。 像这样:g++ -g helloWorld.cc 这将创建一个 a.out 可执行文件。 您将能够使用gdb ./a.out 命令调试您的 a.out exe。 您可以使用的另一个工具是ddd,基本上是 gdb 的 GUI。

祝你好运

【讨论】:

【参考方案3】:

我一直认为 emacs 为 gdb 提供了一个非常用户友好的前端...

例如

% g++ hello.cc -g -o hello emacs hello.cc [在 Emacs 中] Escape-x gdb Emacs 会说“运行 gdb(像这样):gdb”。 添加您的二进制名称(“hello”)。 (例如“运行 gdb(像这样):gdb hello”。) 转到您的 hello.cc 缓冲区。 使用 emacs 命令 'gud-break' 从 hello.cc 缓冲区在 gdb 中设置断点。 (通常绑定到“C-x 空间”。) 转到您的 *gud-hello* 缓冲区。 在 (gdb) 提示符下键入“run”。 使用 [ N ] 下一步或 [ S ] 步骤。或 [ C ] 继续。 [ BT ] 回溯也很有用。 注意 hello.cc 缓冲区最左侧列中的小三角形发生了什么变化。

(这应该足以让您入门。Emacs 就是 Emacs,总是有更多功能......)

【讨论】:

我建议使用g++ -Wall -Wextra hello.cc -g -o hello 进行编译,因为编译器警告非常有用。【参考方案4】:

如果你想要一些用户友好的调试器,你可以使用 Kdbg,它基本上是 KDE 的 gdb 前端。可能不如 ddd 强大,但更容易上手。

【讨论】:

【参考方案5】:

在我在瑞典上的 C++ 编程课程中,有一部分是关于 GNU 调试器的实验室。之后我就没用过,但是here有一篇论文解释了基本用法,据我记得在第2章。

【讨论】:

以上是关于在 Linux 中调试 C++ 程序的主要内容,如果未能解决你的问题,请参考以下文章

在Windows上使用VSCode远程链接到Linux上开发并调试C++程序

在 Linux 中调试应用程序

VScode 编译调试运行C++ 程序的 配置文件设置(LINUX环境Windows10环境)自我总结

使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序

利用emacs调试C++程序教程

利用emacs调试C++程序教程