C语言 有没有解决段故障的方法



我正在开发IoT Linux设备。运行我的申请时存在段故障。我需要一些方法来解决这个问题。


我尝试过的方法:

1.核心转储

ulimit -c unlimited;

unlimit -f unlimited;核心会创造,但也许芯片的内存不够,所以核心总是被修剪。我无法使用 gdb 来获取回溯。

2.DMESG | grep 段错误

这个 linux 系统不会在"demsg"中保存崩溃

3./var/log/messages

这个 linux 系统不会在"/var/log/messages"中保存崩溃


您有什么解决段故障的建议吗?谢谢。

你可以使用像Valgrind这样的工具。当我们试图查找在数组边界之外写入的数据时,它对我们有很大帮助。它适用于检查内存泄漏、边界外情况和分段错误。实际上,我们只是用它来检查我们所有的C/C++程序,并发现了许多未检测到的错误。

注意:不要忘记使用调试信息编译程序(例如 gcc 编译器的 '-g' 开关),以便在 Valgrind 中获得更多人类可读的消息。查看此快速入门指南。

核心转储可能很大,但根据我的经验,它们包含大量的零,因此可以轻松压缩。使用/proc/sys/kernel/core_pattern 文件,你可以让内核通过 gzip 通过管道转储,这样它占用更少的空间(在核心生成期间压缩核心文件)。

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

相关内容

  • 没有找到相关文章

最新更新