【发布时间】:2020-05-09 18:08:26
【问题描述】:
我正在使用vim 进行 C++ 编程。我已将编译命令绑定到 vim 中的 ctrl+c,并通过运行 ./main.out 在另一个 tmux 窗格中运行它。我的问题是当我的 c++ 程序给我segmentation fault 错误时,我不知道是哪一行导致了问题。但是当我在vscode 中编译并运行程序时,它向我显示了导致错误的行。
我正在寻找一种方法来找出导致运行时错误的行,例如在控制台中运行程序的二进制文件时出现segmentation fault 错误。
这是我做./main.out时的示例输出:
[1] 24656 segmentation fault (core dumped) ./main.out
【问题讨论】:
-
运行
gdb ./main.out。另外,在编译程序时添加-ggdb3。 -
请注意,虽然 gdb 几乎可以立即指出程序崩溃的位置,但通常需要进行一些侦探工作才能找到导致崩溃的错误。一旦您知道程序崩溃的位置,您将需要放置一个断点以在崩溃之前停止程序,以收集有关导致崩溃的原因的信息。使用 step 推进程序并打印以显示变量。使用从 gdb 中学到的知识来隔离错误,因为通常更容易证明对孤立错误的修复是正确的。
-
@user4581301 谢谢,看来我很难弄清楚 gdb 是如何工作的:D
-
值得花时间学习。调试器的使用是一项重要的编程技能。作为顶级程序员生产力工具,调试器紧随编译器之后。
-
参见sourceware.org/gdb/current/onlinedocs/gdb 或其他一些 GDB 手册/教程。使用 IDE 可能会更容易。
标签: c++ compiler-errors compilation g++