原文地址:signal 11(SIGSEGV) fault addr deadbaad错误处理 作者:landuochong

首先,你得承认经常看到这样的log是要崩溃的。。。。
没有任何debug信息,你不知道是哪句出错了,你只知道,深层的so调用出问题了。。。
而你基本不可能再去修改这些文件去适应你的程序,因为
1. 能力不足
2. 即使实力超群,投入产出比也相当的不经济,有这些精力解决自己的程序才是正道~
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad,在使用box2d extension的时候你有可能会经常遇到这样的问题,尤其是当你的应用比较大,比较复杂的时候~
在下才疏学浅,只好用最土的办法,隔行打log。。。。
经过无数次的研究尝试,总结出如下规律~

它通常发生在
1. 创建Body
2. 移动Body
3. 删除Body
4. ContactListener
5. 手动设置Body对象为null
6. 还没遇到。。。。

深层次原因

同样经过无数次的试验和失败,几次挑灯夜战,越过重重**,翻阅无数资料,发现这类问题,基本都是深层代码的NullPointerReference所导致的

Bug解释
Box2D里有一个arraylist来维护当前所有的body,是在某个线程(可能是当前工作线程)运行的for循环,如果你在某个线程对body做了一些操作(如destory body)就会导致问题出现。。。

如何避免
1. 不要频繁大规模的创建/删除body对象,尽可能复用可以复用的对象,暂时不用的应当设置为不可见,使body sleep
2. 管理好你的线程,永远使用一个相同的线程来创建/管理/修改body对象
3. ContactListener中不要放实际方法,尽量异步调用
4. 设计模式很重要。。。

解决实例
下面是我的解决实例,仅供参考

protected static Queue<Object> deleteQueue=new LinkedList<Object>();
IUpdateHandler deleteUpdateHandler=new IUpdateHandler() {@Overridepublic void onUpdate(float pSecondsElapsed) {if (!deleteQueue.isEmpty()) {//Do the delete body work}}
}
Scene.registerUpdateHandler(deleteUpdateHandler);

同样,你也可以创建多个队列,分别管理你的创建/删除/碰撞检测等操作~

最后,永远不要指望什么灵丹妙药,这些解决方法也不是狗皮膏药,贴了就好,小心的设计你的模式,认真调试代码,否则这个问题会像牛皮癣一样难以彻底根除

2.错误可以用arm-eabi-addr2line工具找到signal错误时的代码行,但需要出错时的pc指针值,

============Log info=============

01-01 23:59:09.196: I/DEBUG(91): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d
01-01 23:59:09.196: I/DEBUG(91):  r0 00000000  r1 00f92310  r2 00000000  r3 00000000
01-01 23:59:09.196: I/DEBUG(91):  r4 deadd00d  r5 40aadc78  r6 0000020c  r7 5287794c
01-01 23:59:09.196: I/DEBUG(91):  r8 4bf7b940  r9 4bf7be50  10 0106c080  fp 01132bc0
01-01 23:59:09.196: I/DEBUG(91):  ip 00000000  sp 528776e0  lr 40a45f8f  pc 40a45f8e  cpsr 60000030
01-01 23:59:09.326: I/DEBUG(91):          #00  pc 00050f8e  /system/lib/libdvm.so (dvmAbort)
01-01 23:59:09.326: I/DEBUG(91):          #01  pc 00055bd4  /system/lib/libdvm.so (_Z20dvmDecodeIndirectRefP6ThreadP8_jobject)
01-01 23:59:09.327: I/DEBUG(91):          #02  pc 000589f8  /system/lib/libdvm.so
01-01 23:59:09.329: I/DEBUG(91):          #03  pc 0004b44a  /system/lib/libchromium_net.so
01-01 23:59:09.330: I/DEBUG(91):          #04  pc 0004b4aa  /system/lib/libchromium_net.so

============Log info==============

===========Command=============

./prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-addr2line -C -f -e ./out/target/product/a2_3g_data/symbols/system/lib/liblewebcore.so 0x0004b44a
================================

BFD: Dwarf Error: mangled line number section.
WebCore::MediaPlayerPrivate::setVisible(bool)
diy-fp.cc:0


关注我的技术公众号,查看更多优质技术文章推送

微信扫一扫下方二维码即可关注:

signal 11(SIGSEGV) fault addr deadbaad错误处理相关推荐

  1. Android rom开发:app运行异常,报libc: Fatal signal 11 (SIGSEGV) in tid xxx错误

    最近遇到了app在设备上反复挂掉的问题.log如下: 2020-03-07 13:20:24.814 16858-16858/? E/SharedPreferencesImpl: Couldn't c ...

  2. JNI中Fatal signal 11 (SIGSEGV), code 1的错误.

    这个错,搞了一天才搞定.还是自己对jni不熟. com.viking.myapplication A/libc: Fatal signal 11 (SIGSEGV), code 1, fault ad ...

  3. Android 10 SurfaceView 奔溃报错signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4

    最近在Android 10 系统上发现SurfaceView 测试的时候奔溃了,10以前的系统测试都会奔溃,在Android 11之后的设备上是正常的. 上错误日志 Native 报错信息 signa ...

  4. A/libc:fatal signal 11(SIGSEGV).code 1, fault addr 0x0 in tid 26488 (VideoEncoder)

    在调试Camera模块:发现相同的代码在厂家提供的环境里边编译.就是ok的,在我们的源码树中编译,将HAL库推进去后.就会signal 11退出. 一.现象 1 F/libc ( 4250): Fat ...

  5. 游戏测试问题之:Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004

    公司开发的小游戏在进行 Monkey 测试时在个别机型一直遇到相同的几个问题,特此记录一下 错误日志如下: Caused by: java.lang.Error: signal 11 (SIGSEGV ...

  6. cn.sample.mnn.detect A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid

    mnn报错: cn.sample.mnn.detect A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 ...

  7. Fatal signal 11 (SIGSEGV), code 1, fault addr 0x10457e30d996b in tid 5676 (ndroid.settings)

    FROM:http://blogold.chinaunix.net/u3/104564/showart_2091186.html 一.安装交叉编译器  1)交叉编译器使用CodeSourcery提供的 ...

  8. JNI:Fatal signal 11 (SIGSEGV) at 0x00000008 (code=1)错误的一点认识

    最近做的一个东西需要jni去实现,对于一个我这样用惯了java,习惯了debug的人来说,用NDK,使用C/C++去编程是件很苦逼的事情,但是最苦逼的事情在于内存错误发生后如何排查,尤其是 Fatal ...

  9. signal 11 linux,signal 11 (SIGSEGV)错误排查

    jni调试最蛋疼的就是signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4这种错误,爆出来完全不知道是哪句代码造成的,很难定位到问题所在, ...

最新文章

  1. 计算机导论excel,[计算机导论实验三Excel.doc
  2. 查询太慢?看看ES是如何把索引的性能压榨到极致的!
  3. Java中super关键字的位置
  4. linux ATT汇编 与 Intel汇编 语法格式对比
  5. AIX 修 炼 之 路
  6. python实现顺序查找和哈希查找
  7. java网关限流_网关限流使用
  8. jPlayer插件的使用
  9. 通过WM_COPYDATA消息完成进程间通信
  10. [mysql] linux下使用yum安装mysql
  11. 理解 redis 中的 集合对象类型
  12. excel去重怎么操作_excel数据技巧:不用公式如何快速去重
  13. [vue-element] ElementUI使用表格组件时有遇到过问题吗?
  14. 输入输出数组元素的函数重载_C ++函数重载| 查找输出程序| 套装3
  15. 基于扩展性考虑,不同场景选择的不同方案
  16. windows虚拟显示器开发(一)
  17. kali安装QQ音乐
  18. aria2Android服务器教程,Aria2自动更新BT Tracker服务器列表的方法
  19. bzoj4816: [Sdoi2017]数字表格
  20. 防干扰继电器控制电路

热门文章

  1. GPT撑腰,微软再战谷歌 | 大厂集体抢滩ChatGPT:谁真的有实力,谁在试点商业化?
  2. 闲谈IPv6-Loopback网口上的IPv6地址
  3. Android之WindowManager.LayoutParams介绍
  4. windows7挂载nfs共享目录有用户名密码
  5. 苏小红C语言程序设计第九、十章知识总结
  6. 压力测试工具Benchmark
  7. 消息队列 --- RabbitMQ基本概念学习及安装使用
  8. three.js 常用api
  9. 学习分享 | 通过C++,python的对比,帮你快速入门python
  10. 高通骁龙870有哪些哪些值得购买 高通骁龙870有什么手机