我正在使用IoT linux设备。运行我的申请时出现段错误。我需要一些方法来解决这个问题。
我尝试过的方法:
1.coredump
ulimit -c无限制;无限-f无限; 内核会创建,但是也许芯片的内存不足,所以内核总是被截断。我无法使用gdb获取回溯。
2.dmesg | grep segfault
此linux系统无法将崩溃保存在“ demsg”中
3./var/log/messages
此linux系统不会将崩溃保存在“ / var / log / messages”中
您对解决网段故障有什么建议吗?非常感谢。
答案 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 =未定义。如果这样做,则应用程序崩溃时将打印很多有用的信息(通常包括发生崩溃的实际文件和行号)。哦,别忘了将相应的共享库复制到您的目标,否则当您尝试运行检测的应用程序时,动态链接器将引发错误。