会计实操网 加入收藏  -  设为首页
您的位置:会计实操网 > 会计问答 > 正文
如何调试分析Android中发生的tombstone
如何调试分析Android中发生的tombstone
提示:

如何调试分析Android中发生的tombstone

Android中较容易出现以下三类问题:Force close / ANR / Tombstone

前两者主要是查看当前的进程或者系统框架层的状态和堆栈就基本可以分析出来,本文主要讨论一下tombstone的情况。

tombstone一般是由Dalvik错误、状态监视调试器、C层代码以及libc的一些问题导致的。


系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收到之后,进程的调试工具会把进程中当时的调用栈
现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,开发者需要通过调用栈来分析整个调用流程来找出出
问题的点。

基本工具:

prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin

在分析的时候仔细读取汇编会获得更多有用的异常发生时的信息。

1.arm-eabi-addr2line 将类似libxxx.so 0x00012345的调用栈16进制值翻译成文件名和函数名

arm-eabi-addr2line -e libxxx.so 0x00012345

2.arm-eabi-nm 列出文件的符号信息

arm-eabi-nm -l -C -n -S libdvm.so > dvm.data

3.arm-eabi-objdump 列出文件的详细信息

arm-eabi-objdump -C -d libc.so > libc.s

通过以上工具的分析 ,我们可以得到较完整的调用栈以及调用逻辑的汇编码。

然后需要结合ARM架构及ARM汇编的知识(有些情况下可能需要使用gdb)

来分析出现tombstone的原因,以下是本人遇到过的一些tombstone的情况:

1.无效的函数指针:指针为NULL或者已经被重新赋值

2.strlen崩溃:导致不完全的栈信息,栈被破坏
3.FILE操作:因为stdio并非线程安全的,多线程操作时,容易出现异常。

望采纳。

如何调试分析Android中发生的tombstone
提示:

如何调试分析Android中发生的tombstone

如何调试分析Android中发生的tombstone
Android中较容易出现以下三类问题:Force close / ANR / Tombstone

前两者主要是查看当前的进程或者系统框架层的状态和堆栈就基本可以分析出来,本文主要讨论一下tombstone的情况。

tombstone一般是由Dalvik错误、状态监视调试器、C层代码以及libc的一些问题导致的。

当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收到之后,进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,开发者需要通过调用栈来分析整个调用流程来找出出问题的点。

基本工具:

prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin

在分析的时候仔细读取汇编会获得更多有用的异常发生时的信息。

1.arm-eabi-addr2line 将类似libxxx.so 0x00012345的调用栈16进制值翻译成文件名和函数名

arm-eabi-addr2line -e libxxx.so 0x00012345

2.arm-eabi-nm 列出文件的符号信息

arm-eabi-nm -l -C -n -S libdvm.so > dvm.data

3.arm-eabi-objdump 列出文件的详细信息

arm-eabi-objdump -C -d libc.so > libc.s

通过以上工具的分析 ,我们可以得到较完整的调用栈以及调用逻辑的汇编码。

然后需要结合ARM架构及ARM汇编的知识(有些情况下可能需要使用gdb)

来分析出现tombstone的原因,以下是本人遇到过的一些tombstone的情况:

1.无效的函数指针:指针为NULL或者已经被重新赋值

2.strlen崩溃:导致不完全的栈信息,栈被破坏

3.FILE操作:因为stdio并非线程安全的,多线程操作时,容易出现异常。
本文涉及到的tombstone处理的主要逻辑所在文件如下:
BootReceiver.java -- frameworks\base\services\java\com\android\server
Debuggerd.c -- system\core\debuggerd
ThreadLocal.java -- libcore\luni\src\main\java\java\lang

越狱里的经典台词
提示:

越狱里的经典台词

1、You come around these bleachers again,it's gonna be more than just words we're exchanging.你要是再到露天看台来的话,我们交流的就不止是语言了(michael拒绝了变态的t-bag,t-bag丢下一句文绉绉的威胁)

2、Better late than never,right?迟了总比没有好吧。(黑大兵c-note在最后关头才把药给michael)

3、There's something strange about him.I gave him the results of his blood test,and there was this look on his face. It was,um...relief (美女医生觉得很奇怪:为什么当ms得知自己有糖尿病是脸上却出现了释然的表情。)

4、Michael: You and me…It's real…
我和你。。。是真的
这不仅仅是个含蓄的表白。斯科菲尔的眼神说明了一切。

5、Abruzzi: I kneel only to God. Don't see him here.
我只对上帝下跪。但我没有在这里看到上帝。
也许为了尊严,但更多的是赎罪。

6、Friend of Sucre: You look like hell.
Sucre: I'm man from hell, puppy. Now, I just gotta go to Vegas.
-你看起来像个魔鬼!
-我可是从地狱逃出来的!我现在就要去维加斯。
如果你想知道知道什么是爱,那么问问这个“魔鬼”!

7、T-bag: How about getting us to somewhere cooler, say, Africa?
把我们丢到凉快点的地方去怎么样,比如,非洲?
Hey, this man was still white this morning!
嘿,早上这哥们还是个白人呢!
这是T-BAG。一个聪明的疯子!

8、Michael/Lincoln: Just have a little faith.
活得有信念点!
逆境中的精神支柱。

9、Abruzzi: Take my hand so we can put all this behind us.
握手言和,把以前的一切一笔勾销吧。
Does not a warm hand feel better than a cold shark?
温暖的手不比冷酷的人好得多吗?
渡尽劫波兄弟在,相逢一笑泯恩仇。

10、Friend of Sucre: You look like hell.
Sucre: I'm man from hell, puppy. Now, I just gotta go to Vegas.
-你看起来像是去拼命的。
-我可是从地狱逃出来的!我现在就要去维加斯。
Sucre对爱的执著让我感动。就像他说的,"She is the love of my life". 此生挚爱。

越狱里凯勒曼什么时候变好的
提示:

越狱里凯勒曼什么时候变好的

1.在越狱第二季,是因为凯勒曼长期无法直接联系女总统却一直要听金(Kim)的指示做事,让其逐渐意识到再跟着同流合污做下去自己早晚要被除掉。
2.所以在金下令杀了莎拉,但莎拉逃跑之后,其谎称莎拉已死。这也算是变节的开始。
3.凯勒曼倒戈为迈克尔等人了解事情真相起到了重要作用,对他来说,敌人的敌人就是朋友。之后,在凯勒曼的帮助下,迈克尔和莎拉在雪茄俱乐部内莎拉父亲的柜子里找到了重要录音。
4.最终凯勒曼还出庭坦白自己是如何陷害林肯的犯罪过程。

WWE送葬者什么时候退役的?
提示:

WWE送葬者什么时候退役的?

熟悉摔跤比赛的朋友肯定对送葬者和布鲁克莱斯纳这两位非常的熟悉,有一场比赛应该是众多摔迷印象很深的,那就是二者之间的对战。这场对战送葬者被打破记录的,粉碎他的不败神话,在2014年4月6日摔跤狂热大赛第30届上,对手是被人称之为猛兽的布洛克莱斯纳。布洛克莱斯纳可是地表最强格斗赛事UFC重量级冠军,布洛克莱斯纳在这场比赛之前,可以说是已经打遍无无敌手了,约翰塞纳,马克亨利、大秀哥、王大锤还有肖恩迈克尔斯都败在了他的手下,战斗力绝对不是吹的。 一位是WWE不败神话送葬者,一位是UFC重量级冠军猛兽布洛克莱斯纳,这场比赛坚持了25分钟,送葬者的锁喉抛摔、墓碑钉头都打出来了,但是都没有击败布洛克莱斯纳,就连地狱之门也被布洛克莱斯纳轻松破解。最终布洛克莱斯纳一个F5,一个终结技送葬者被成功击败。现场的观众估计都没有想到,布洛克莱斯纳一个F5打出来以后,送葬者竟然没有反抗,竟然输了比赛。 21连胜就这样被终结了,就连布洛克莱斯纳和他的经纪人保罗海曼当时也是觉得不可思议,现场摔迷更是难以置信,甚至有些摔迷接受不了这个结果,痛哭了起来。一代传奇WWE不败神话送葬者就这样被布洛克莱斯纳击败了。赛后布洛克莱斯纳离开了擂台,现场观众发出了一阵又一阵的嘘声,擂台上只留下了惨败的送葬者,他缓慢地起身后四周观望了许久准备离开,解说员们都站起来为他鼓掌,现场的摔迷也是齐刷刷地送上了掌声,向他致敬。 现场观众一直在呼喊,谢谢你,送葬者。其实送葬者在这个时候退役很合适,毕竟打这场比赛的时候已经49岁了,三十年如一日的训练摔跤,就算是机器人也该退休了。送葬者1987年就开始了摔跤生涯,达这场比赛的时候已经是他踏入擂台的第27年了,该休息了,也该退役了。

WWE送葬者的完整个人资料
提示:

WWE送葬者的完整个人资料

  性别:男   身高:208 cm   体重:136 kg   中文名:送葬者   本名:Mark William Calaway   出生日期:1965-3-25   首次登台:1984年   现状:休战中,成就19:0神话   绰号:死神(Dead Man)、棺材佬(The Phenom),地狱使者,送葬者   昵称:Taker(天使,使者的意思)
  招牌动作
  黑暗压制(dark pin): 黑暗压制
  送葬者的压制方式与一 送葬者近照
  般摔角选手不同,他在压制对手时会将对手 UNDERTAKER
  的双手放在胸口(代表替对手送葬的意思),并以类似柔道的上四方固的姿势挺起上半身,约定成俗地以招牌翻白眼、吐出长长得舌头示威。   墓碑钉头:(TombStone Piledriver): 墓碑钉头
  送葬者自从加入WWE以来就持续使用的必杀技。化身美国恶棍时代也会在重大比赛时祭出这招。当他摆出割喉动作时就是使出此招的前兆。现在使用的是改良过的版本,顶多让对手的头顶稍微用力撞在擂台(或其他地方),让对手有晕眩感而已。   锁喉抛摔(Choke Slam): 喉咙落
  抓住对手脖子,直接以这个姿势举起后将对手摔在擂台等平面上。送葬者出招时的特征在于会大幅度地举起右手且停留。    最终旅程
  最后乘坐(Last Ride Power Bomb):也就是超高角度的炸弹摔。由于栽墓碑落下技遭WWE列为禁招的关系,送葬者因而创造出的招式。他会在举起对手后,用双手抓住对手的裤子两侧,再高高地举到超过送葬者头顶的高度,然后用力往下砸的终结技。
  比赛图片(20张)   三角锁腿
  三角锁腿(Triangle choke):对现实生活中身为综合格斗忠实观众的送葬者来说,是再适合也不过的隐藏招式。这招很厉害,受到此招攻击的选手很多都只好认输。送葬者就曾用此招逼Great Kahli投降。   断头台(Leg Drop):就是当对手无力反击躺在擂台上的时候,送葬者会从高处坐下,大腿处落在召食者 断头台
  的脖子上。