安卓崩溃日志基础知识扫盲2:SIGSEGV

Unity导出到AS中真机测试apk没有问题,aab提交到GooglePlay审核通过,但是从Google Play下载的应用闪退问题 阅读详情

上一节,我们已经知道split_config.arm64_v8a.apk背后的含义,我们再整理下崩溃日志:

# GLThread 1371(29457) SIGSEGV(SEGV_MAPERR)
 #00 pc 0000000000aa3f58 split_config.arm64_v8a.apk
 #01 pc 0000000000aafb84 split_config.arm64_v8a.apk

GLThread 1371(29457)表示这是一个OpenGL相关的线程,线程ID为1371,进程ID为29457,这里又牵扯到线程和进程的概念,涉及到fork、thread相关的编程知识,这里就不再展开了。

我们又发现一个知识盲区,就是这个SIGSEGV(SEGV_MAPERR),很有必要解读下这块的知识点。

SIGSEGV

当程序尝试访问超出其分配内存区域、未分配内存区域的地址时,操作系统会发送这个SIGSEGV(Segmentation Violation)信号给程序,以表明发生了访问错误。

而括号里面的SEGV_MAPERR,准确说是一个错误码,告诉你是因为什么原因导致的异常,不过这个错误码非常晦涩难懂,只能给你一个排查方向。

接下来就详细介绍几个常见的错误码:

SIGABRT

产生这个错误的可能原因:

1. assert

在cocos2dx中有一个Marco:

CCASSERT(false, "xxx");

通常我们是用来检查某些情况是否符合预期,如果不符合,程序就会主动断言挂起,这个Marco的内部实现使用的就是assert函数。

一般都是用在debug模式,在发布release版本的时候,Marco是一个空实现。

2. abort:

abort函数会主动终止程序,同时发送信号SIGABRT,cocos2dx中也有使用该函数。

3. 重复释放指针,或者释放野指针

这种指针的问题最难排查了。

SEGV_ACCERR

通常是因为程序试图访问一个无权访问的内存地址,例如尝试读取受保护的内存区域或未分配的内存区域。

这种错误通常发生在程序访问数组越界或使用已释放的指针时。

SEGV_MAPERR

通常是因为程序试图访问一个不合法的内存地址,在遇到该错误时,一般会提供相关的错误信息和堆栈跟踪,可以利用这些信息定位错误所在的代码行,并进行排查和修复。

这也是我们经常会遇到的崩溃错误码,排查方向为:

  • 使用未初始化的变量:这个属于c++编码习惯问题,成员变量一定要在构造函数进行初始化。

  • 野指针:多个指针指向同一块内存,当这块内存释放时,需要同步给相关的指针,否则就会出现野指针。

  • 数组越界:本质还是指针。

  • 堆栈溢出:一般我们不会出现这种情况。

具体代码场景不是很好描述,我这里有一种情况可以参考理解下:

class A{
public:
 void func(){}
};

class B{
public:
  B(A* ptr){
    this->_a = ptr;
  }
  void callA(){
    this->_a->func();
  }
private:
  A* _a=nullptr;
};

B* b=nullptr;

void test()
{
  A a;
  b = new B(&a); // a是一个局部变量,test函数结束就会被回收释放,但是b还在持有
}
test();
b->callA(); // 此时a不为nullptr,但是调用a->func()就会crash

对象在使用时已经释放,通俗点说:对象A用局部变量初始化,分配在栈上,函数结束就提前释放了。赋值给其他对象B,B在其他函数引用A时,出现崩溃,这种问题排查起来也很坑。

小结

到这里我们对SIGSEGV有了一个大概的认识,SIGSEGV(SEGV_MAPERR)是我们遇到最多的崩溃信号量,当看到这个SEGV_MAPERR,大部分情况下都是内存管理的问题,访问了无效的内存导致的。

下一节,我们将从崩溃地址下手,分析问题所在。

Frida Hook JNI动态注册函数的三种核心路径剖析 在Android应用安全分析与逆向工程领域,Hook技术是动态分析Native层代码的关键手段。其核心原理是通过拦截或修改目标函数的执行流程,实现对函数参数、返回值及内部逻辑的监控与篡改,从而揭示应用的底层行为与安全机制。这项技术在移动安全、漏洞挖掘和协议分析中具有极高的技术价值,尤其适用于分析将核心逻辑下沉到Native层的应用。面对使用JNI动态注册函数的场景,常规的Hook方法往往失效,这便需要更深入的底层技术来应对。本文聚焦于**Frida**这一动态插桩工具,深入剖析通过Hook Register 阅读详情

相关推荐

WPS占用C盘空间解决方案与优化技巧

办公软件在长期使用过程中会产生大量缓存和历史文件,这些文件往往隐藏在系统目录中,导致磁盘空间被无声占用。以WPS为例,其版本历史备份、云同步缓存和模板库是主要空间占用源。通过分析文件存储机制,可以定位到具体的缓存路径,如AppData目录下的Kingsoft文件夹。针对这一问题,有效的解决方案包括手动清理、自动化脚本和注册表优化。对于需要持续监控的场景,可以结合PowerShell脚本和任务计划实现自动化管理。在实际应用中,这些技术不仅适用于WPS,也可迁移到其他办公软件的空间优化中,是每位IT运维人员和高

weixin_30788239的博客 458

ANDROID动态加载 使用SO库时要注意的一些问题

基本信息 作者:kaedea 项目:android-dynamical-loading Android项目里的SO库 正好动态加载系列文章谈到了加载SO库的地方,我觉得这里可以顺便谈谈使用SO库时需要注意的一些问题。或许这些问题对于经常和SO库开发打交道的同学来说已经是老生长谈,但是既然要讨论一整个动态加载系列,我想还是有必要说说使用...

weixin_34329187的博客 1296

从零到一:手把手教你用STM32F103C8T6打造个人专属开发板(附立创EDA工程与源码)

本文详细介绍了如何使用STM32F103C8T6微控制器从零开始设计和制作个人专属开发板。内容涵盖硬件选型、原理图设计、PCB布局、功能验证等全流程,并提供了立创EDA工程文件和源码,帮助开发者深入理解STM32开发板的硬件架构与设计要点。

weixin_26802933的博客 286

Android问题笔记四十二:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法

之前开发的 SO 一直很正常,最近一段时间有新业务要在原来SO 上开发,并且有了新的设计逻辑,也是新的同事去写了。所以公司准备 SO 重写一下。部分业务还是仿照或复制原来的代码,但是给到 Android 后一直崩溃,而且看 JNI 中同事写的日志最终停止点不固定。

空名先生 4304

线上专利申请(超详细)| 签名确认

在【法人登录】页面点击【证书登录】按钮,弹出证书登录提示框,点击【确 认】按钮,进入到输入证书密码页面,点击【取消】按钮,取消本次操作。企业在提交申请时,需要增加签名,如使用企业账户点击提交,会弹出“法人、代理机构不能签名,请使用经办人签名”,这个时候就需要换个账号了。在需要签名时,将专利官网的登录方式点击法人登录,选择扫码登录,使用移动端经办人账户的扫一扫功能扫描登录。登录完成后,再点击签名,使用移动端扫一扫功能,扫描签名,输入证书号,确认签名,并提交。最后,祝大家的申请都成功!

weixin_62112323的博客 9112

海康工业相机使用:常见问题及解决方法

工业相机在使用过程中,经常会因为操作不当、使用环境不当等原因出现一些问题,本篇教程,主要针对海康工业相机常见问题及其定位方法做以简单介绍,希望可以帮助大家。 注:该教程对其他品牌工业相机“常见问题”排查,也具备一定的指导意义。 当出现无法通过客户端发现设备或者无法预览图像等问题,先确认当前的运行环境是否满足以下要求: 确认装有相机驱动软件的电脑网卡为千兆网卡(Gige接口相机); 确认网卡是否已开启巨型帧; 确认电脑与网口相机之间的网络链路为千兆; 确认装有相机驱动软件的USB接口为3...

Cche的博客 3万+

Android NDK开发崩溃signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法

一.前言 在NDK开发的过程中,如果遇到应用Crash的情况,JNI层的报错信息并不像java层那样可以直接看到错误信息和错误的位置,如果要想定位的到错误的位置,需要借助NDK的一些工具进行地址转换,本文中用addr2line(NDK的工具)来捕捉错误信息 二.分析 以下是我的报错信息 读取其中的关键信息 1.错误代号:signal 11 (SIGSEGV), cod...

相忘于江湖 5万+

从命令到对话:LLM如何重塑车载语音交互与软件定义汽车体验

自动语音识别和自然语言处理是智能交互的核心基础技术,它们使机器能够理解和响应人类语音指令。其原理在于通过声学模型和语言模型将声音信号转化为文本,再解析文本背后的用户意图。这项技术的价值在于提供了一种自然、高效且能解放双手的人机交互方式,极大地提升了在特定场景(如驾驶)下的安全性与便利性。随着技术演进,其应用场景已从简单的命令控制扩展到复杂的多轮对话和跨域任务执行。当前,软件定义汽车的架构变革为车载语音提供了统一的控制平台,而大型语言模型的引入则带来了范式革命,使其从功能触发器进化为真正的智能任务执行者。本文

weixin_42669344的博客 563

安卓崩溃日志基础知识扫盲1

该系列教程会带你一字一行解读崩溃日志,希望对你排查定位bug有所帮助。

chuyouyinghe的专栏 562

yolov26改进 | 检测头篇 | 利用渐近特征金字塔网络AFPN改进yolov26检测头融合P2网络结构(让小目标无所遁形,全网独家首发)

本文介绍一种基于AFPN渐近特征金字塔网络改进的YOLOv26四检测头Detect_FPN。AFPN通过逐级融合底层细节、中层结构与高层语义特征,缩小不同尺度特征之间的语义差距,减少直接融合带来的信息冲突,使检测头获得更稳定、更充分的多尺度表达。本文进一步增加高分辨率小目标检测分支,强化对微小目标、密集目标和复杂背景目标的感知能力,适合工业缺陷、遥感及无人机等场景。文中将展示基础模型与改进模型的训练对比结果,并提供完整代码、配置文件、模块注册方法及Codex修改思路,方便直接复现和二次创新。

Snu77的博客 372

1篇2章1节:在 Mac 上安装 Python,从环境检查到工具配置的完整指南

Python 是当今最流行的高级编程语言之一,广泛应用于数据分析、人工智能、自动化脚本和 Web 开发。虽然 macOS 曾自带 Python,但从 macOS 12.3 开始,系统不再默认提供可直接使用的版本,因此需要手动安装。本文将详细讲解如何在 Mac 上安装最新版本的 Python,如何验证安装是否成功,以及如何配置 IDLE 和 Python Launcher 等工具,为日常开发和学习打下坚实基础。即便你是完全的新手,也能按步骤完成环境搭建。

MD Code 849

安卓崩溃日志基础知识扫盲3:函数名称修饰

在之前的2篇教程里面,我们已经了解了的相关基础知识,本节教程就来详细聊一聊这个崩溃地址相关的知识。

chuyouyinghe的专栏 153

webrtc进阶-- FlexFEC 实现原理与调试分析(m80 代码对齐版)

WebRTC 中 FlexFEC 技术解析与调试指南 摘要:本文深入分析 WebRTC 的 FlexFEC(灵活前向纠错)技术实现原理,重点探讨其在 m80 版本中的协商机制、接收侧恢复流程以及 SFU 场景下的特殊处理。文章指出 FlexFEC 通过动态冗余策略提升弱网抗丢包能力,详细解析了编解码器分配、SSRC 映射、包恢复等关键环节,并提供了针对 XR+SFU 场景的调试建议。调试时可重点关注 FEC 包接收与媒体包恢复日志,以验证链路有效性。

HOSTEN的博客 49

Android NDK与JNI开发实战:从零构建Java与C++的桥梁

在移动应用开发中,性能优化和代码复用是核心挑战。Java Native Interface(JNI)作为Java平台的标准编程接口,定义了Java虚拟机与原生代码(C/C++)之间的交互协议,是实现跨语言调用的关键技术。其原理是通过严格的函数命名规则和数据类型映射,在Java层声明native方法,在Native层实现对应函数,最终编译为动态链接库(.so文件)。这项技术的价值在于能够直接利用操作系统底层能力,显著提升计算密集型任务(如图像处理、音视频编解码)的执行效率,同时复用大量成熟的C/C++生态库。

weixin_33894640的博客 369

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Anroid SIGSEGV(SEGV_MAPERR)可能的解决方案

前言 最近App闪退,通过Bugly监控看的一头雾水,都是一些底层库的东西,并且并不是可复现的。 Bugly提供信息 不过好在Bugly有跟踪日志 在日志的最后看到了红字 IMemory : cannot map BpMemoryHeap (binder=0x9b2af780), size=18665472, fd=87 (Out of memory) 什么?我OOM了?但是我在开发的过程中,明明通过LeakCancy内存泄漏神器进行了周密的内存泄漏排除鸭。 并且问题并不复现,在思考了两三天后,并

阳光大男孩!!!的博客 5657

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android NDK开发崩溃 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR),解决方法

Android NDK开发崩溃 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR),解决方法 - 普通R - 博客园 (cnblogs.com)

sun007700的专栏 1134

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android SIGSEGV(SEGV_MAPERR) 崩溃问题

SIGSEGV(SEGV_MAPERR) 0x0 #00 lr 0004f5c1 /system/lib/libc.so (fileno+0) [armeabi-v7a::6f5a3c1224c00f84c8bda247140513ef] java: [Failed to get Java stack] 主要报错信息就是上面这段 费了好半天才复现出来的问题 , 不是必现的是偶发的 问题是这样的 最近在做一个 UVCCamera 和 人脸识别 结合的一...

Keepsty的博客 3886

安卓程序崩溃异常信息 SIGSEGV,产生的原因是因指针被截断,其中错误地址的前 32 位全部为零。

将 32 位代码移植到 64 位架构 如果您的代码已经可以在桌面或 iOS 平台上运行,那么您无需针对 Android 做额外的工作。如果这是第一次针对 64 位系统构建您的代码,那么您需要解决的主要问题是指针不再适合int这样的 32 位整数类型。您将需要更新以int、unsigned或uint32_t等类型存储指针的代码。在 Unix 系统上,long对应的是指针大小,但在 Windows 上并非如此,因此您应该改用释意类型uintptr_t或intptr_t。使用ptrdiff...

AppNinja 开发手记 2684

aab 找不到so文件 split_config.arm64_v8a.apk

这个很蛋疼,android 9的一切正常,android12的第一次运行正常,第二次再运行就闪退,android13的也一切正常,找了很久才找到解决方案。测试的时候不能打aab包测试,apk一切正常,上传到google后台安装测试,闪退,日志如下。

伯爵的专栏 3401

bugly之SIGSEGV(SEGV_MAPERR)问题定位及解决

SIGSEGV(SEGV_MAPERR) 记录一下关于我在项目中遇到 SIGSEGV(SEGV_MAPERR) 异常引起原因。 在 POSIX 兼容的平台上,SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。SIGSEGV 的符号常量在头文件 signal.h 中定义。因为在不同平台上,信号数字可能变化,因此符号信号名被使用。通常,它是信号11。 对于不正确的内存处理,如当程序企图访问 CPU 无法定址的内存区块时,计算机程序可能抛出 SIGSEGV。操作系统可能使用信号栈

BugGodFather的博客 1万+

android ndk开发SIGSEGV错误

最近进行ndk开发,偶尔会报Fatal signal 11(SIGSEGV),这个问题非常诡异,诡异就在偶然出现,并且在不同的地方。查看日志发现都是内存malloc,free方面的错误,有opencv中的,有对std::vector进入插入分配内存引发的,有在jni函数中获取数组指针发生的,真的是让人摸不着头脑: 最终发现并不程序本身的问题。问题是heap size的限制,因为我

朗云星空 2322
上一篇: Unity 通过解析libil2cpp.so文件查看Android Crash崩溃原因
下一篇: 安卓崩溃日志基础知识扫盲1
FoxGameY
博客等级 码龄13年 81粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值