gcc segmentation fault - 我怎样才能找到它发生的地方?

gcc segmentation fault - how can I find a line where it happened?

我正在使用 Ubuntu 和 gcc。我的应用程序崩溃 我在控制台中只有 Segmentation fault 消息。 (之前报告了 Segmentation fault (core dumped),但现在只报告了 Segmentation fault)。

没有提示问题出在哪里,所以我不明白应该如何解决这个问题。我需要一些提示来找出造成这种情况的原因 - 最好是完整的堆栈跟踪或至少对象 type/method 或类似的东西。

解决此类问题的正确方法是什么? (可能会用一些额外的标志编译,运行 一些工具,收集核心转储并以某种方式分析它?)

您可能需要通过

启用核心转储
ulimit -c unlimited

一旦有了核心转储,就可以用 GDB 查看程序状态:

gdb my_prog core

然后,如果您 运行 程序在 GDB 下直至崩溃,您应该会看到相同的视图 - 您可以这样做,而不是收集核心转储。特别是,它会告诉您哪一行导致了段错误,以及此时调用堆栈的状态。

要获得最佳调试视图,您应该告诉编译器包含调试符号 (-g) 并禁用优化 (-O0)。

您可以使用 gdb 工具来帮助调试。 运行 gdb ./your_app_name 如果你安装了 gdb,你会在终端上看到如下信息:

.....

键入 "apropos word" 以搜索与 "word" 相关的命令... 从 ./gsvod_client 读取符号...完成。 (gdb)

然后输入"r"启动你的应用程序,如果它再次崩溃,你可以输入'bt'查看问题发生的行。