有什么方法可以解决网段故障?

时间:2018-12-26 06:25:23

标签: c linux segmentation-fault

我正在使用IoT linux设备。运行我的申请时出现段错误。我需要一些方法来解决这个问题。


我尝试过的方法:

1.coredump

ulimit -c无限制;无限-f无限; 内核会创建,但是也许芯片的内存不足,所以内核总是被截断。我无法使用gdb获取回溯。

2.dmesg | grep segfault

此linux系统无法将崩溃保存在“ demsg”中

3./var/log/messages

此linux系统不会将崩溃保存在“ / var / log / messages”中


您对解决网段故障有什么建议吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用Valgrind之类的工具。当我们尝试查找超出数组范围的数据时,它对我们有很大帮助。这对于检查内存泄漏,越界情况和分段错误非常有用。实际上,我们以后只是用它来检查我们所有的C / C ++程序,发现了很多未被发现的错误。

注意:不要忘记使用调试信息(例如,gcc编译器的'-g'开关)编译程序,以在Valgrind中获得更多可读的消息。选中this quick start guide

答案 1 :(得分:0)

Coredumps可能很大,但是以我的经验,它们包含巨大的零块,因此可以轻松对其进行压缩。使用/ proc / sys / kernel / core_pattern文件,可以使内核通过gzip将转储通过管道传输,从而使其占用的空间更少(compressing the core file during core generation)。

另一种选择是尝试使用-fsanitize系列gcc选项。更具体地说,-fsanitize =地址和-fsanitize =未定义。如果这样做,则应用程序崩溃时将打印很多有用的信息(通常包括发生崩溃的实际文件和行号)。哦,别忘了将相应的共享库复制到您的目标,否则当您尝试运行检测的应用程序时,动态链接器将引发错误。