Skip to content

C&CPP Debug笔记

如何使用调试器来定位和修复"Segmentation fault (core dumped)"错误?

使用调试器(例如 GDB 在 Linux 中)来定位和修复"Segmentation fault (core dumped)"错误是一个很好的方法。以下是一些基本步骤:

  1. 编译你的程序以包含调试信息。在使用 gcc 编译你的程序时,可以添加 -g 选项来生成调试信息:

bash gcc -g myprogram.c -o myprogram

这将生成一个名为 `myprogram` 的可执行文件,其中包含了源代码的行信息,这使得 GDB 可以显示源代码行信息。
  1. 运行 GDB。在命令行中键入 gdb,后面跟上你的程序名:

bash gdb myprogram

这将启动 GDB,并加载你的程序。
  1. 运行你的程序。在 GDB 提示符下,键入 run(或简写为 r)以开始运行你的程序:

bash (gdb) run

如果你的程序需要命令行参数,可以在 `run` 命令后面添加这些参数。
  1. 当程序出现段错误时,GDB 将停止并显示一条消息。这时,你可以使用 backtrace(或简写为 bt)命令来显示函数调用堆栈:

bash (gdb) backtrace

这将显示出导致段错误的函数调用序列。最顶部的函数调用是最后发生的,也就是导致段错误的地方。
  1. 查看源代码和变量值。你可以使用 list(或简写为 l)命令来查看源代码,使用 print(或简写为 p)命令来查看变量值:

bash (gdb) list (gdb) print myvariable

  1. 修复你的代码。根据 GDB 的输出,你应该能找出导致段错误的代码行和变量。修复这些问题,然后重新编译和运行你的程序,如果还有其他的问题,重复上述步骤。

记住,"Segmentation fault (core dumped)"通常是由于尝试访问非法内存(如解引用空指针,访问数组越界等)导致的。在你的代码中寻找这类问题,并尝试理解为何会尝试访问这些非法内存。