【问题标题】:Why the fault address of the SIGSEGV crash remains the same? [closed]为什么SIGSEGV crash的故障地址还是一样? [关闭]
【发布时间】:2021-05-17 08:04:06
【问题描述】:

我有一个在 arm64-v8a Android 平台上转移的多线程 CPP 程序(一个侦听器线程、一个数据处理器线程)。

最近由于下图相同的原因,它继续崩溃:

E CRASH   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr fffffffffffffffc

据我所知,由于fault addr 保持不变,它不可能是“访问数组越界”或“取消引用 NULL/未初始化的指针”之类的情况,所以我能想到的唯一原因是“堆栈溢出”,对吗?

那么我的程序到底发生了什么,更重要的是,我该如何找到真正的原因和解决方案?

提前致谢。

【问题讨论】:

标签: android c++ segmentation-fault stack-overflow arm64


【解决方案1】:

故障地址保持不变并不意味着您可以排除您提到的问题。事实上,在我看来,可能正在执行具有 NULL 值的指针算术(例如数组索引),导致 -4 被用作地址。

您可以在调试器下运行您的程序,或者至少使用一个来分析核心转储。此外,使用{Memory, Address, Thread}Sanitizers 或类似的检测工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多