android - 为什么SIGSEGV crash的故障地址还是一样?
问题描述
我有一个在 arm64-v8a Android 平台上转移的多线程 CPP 程序(一个侦听器线程、一个数据处理器线程)。
最近它继续崩溃,原因如下所示:
E CRASH : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr fffffffffffffffc
据我所知,由于fault addr
保持不变,它不可能是“访问数组越界”或“取消引用 NULL/未初始化的指针”之类的情况,所以我能想到的唯一原因是“堆栈溢出”,是吗?正确的?
那么我的程序到底发生了什么,更重要的是,我该怎么做才能找到真正的原因和解决方案呢?
提前致谢。
解决方案
故障地址保持不变并不意味着您可以排除您提到的问题。事实上,在我看来,可能正在执行具有 NULL 值的指针算术(例如数组索引),从而导致-4
被用作地址。
您可以在调试器下运行程序,或者至少使用一个来分析核心转储。此外,使用{Memory, Address, Thread}Sanitizers或类似的检测工具。
推荐阅读
- python - 从numpy中的张量中过滤出零矩阵
- mysql - 使用 mysql 和 apache 的目录中的身份验证不起作用
- python - 我的 N-Queens 解决方案有什么问题?
- postgresql - 与 postgreSQL 模式连接
- java - 如何创建一个从 0 到 Long 范围的大循环?
- react-native - OnEndReached 由于数据少于一页而连续触发
- python - Django rest 框架 ApiView reurn 可执行文件
- javascript - 警告:道具类型失败:提供给视图的道具“背景颜色”无效:
- javascript - 将文件复制到新位置
- sql - 插入多行 Qt Quick Local Storage?