我在一个IoT linux设备上工作。运行我的应用程序时出现段故障。我需要一些方法来解决这个问题。
我尝试过的方法:
1.coredump
ulimit -c无限;无限-f无限;内核将会创建,但可能芯片的内存不足,所以内核总是被中继。我不能使用gdb来获取回溯。
2.dmesg | grep段错误
此linux系统不会将崩溃保存在"demsg“中
3./var/log/messages
此linux系统不会将崩溃保存在"/var/log/messages“中
您对解决网段故障有什么建议吗?非常感谢。
发布于 2018-12-26 15:16:00
您可以使用Valgrind这样的工具。当我们试图查找写入数组边界之外的数据时,它对我们有很大帮助。它很适合检查内存泄漏、越界情况和分段错误。实际上,我们只是用它来检查我们所有的C/C++程序,并发现了许多未检测到的错误。
注意:不要忘了用调试信息编译你的程序(例如,gcc编译器的'-g‘开关),以便在Valgrind中获得更多人类可读的消息。检查this quick start guide。
发布于 2018-12-26 16:53:36
Coredumps可以很大,但根据我的经验,它们包含大量的零,因此它们可以很容易地压缩。使用/proc/sys/ kernel /core_pattern文件,您可以让内核通过gzip传输转储,这样它占用的空间就更少( compressing the core file during core generation )。
另一种选择是尝试-fsanitize系列的gcc选项。更具体地说,是-fsanitize=address和-fsanitize=undefined。如果这样做,您的应用程序将在崩溃时打印许多有用的信息(通常包括发生崩溃的实际文件和行号)。哦,不要忘记将相应的共享库复制到您的目标上,否则当您尝试运行插入指令的应用程序时,动态链接器将抛出一个错误。
https://stackoverflow.com/questions/53928209
复制相似问题