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'查看问题发生的行。
我正在使用 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'查看问题发生的行。