##################10.24########
先很高兴告诉你,B2GOS已经完美运行在oneplusX!!谢谢你的建议。
这几天,我找到了前B2GOS的telegram频道,在B2G团队解散后,他们启动了一个实验性项目servonk on gonk,“This is an experimental project”,该项目在B2G基础上使用mozilla的新引擎servo替代gecko引擎,去掉了gecko和gaia层,从gonk层启动“servo”再启动前端UI。
说正题:
我把我的log问题与他们分享,他们给出了和你相似的建议,更换更加稳定的版本源码!
the crash seems to be a compositor crash
it’s likelly full of traps
gecko52 lacks a bunch of b2g apis
B2G2.6/48 is the latest with the b2g specific apis
master分支有太多的问题,并且我使用的还是gecko52,是最后一个存在B2G项目版本,维护最少的一个版本。
显然,从崩溃log知道问题出在gecko层的Compositor,但是相比于找到并修复Compositor问题代码的精力花销,我不如听你和前B2G团队的建议,更换稳定的B2G版本!下载了gecko44+gaia2.5代码,用变量更改gecko和gaia源码路径到下载的2.5代码,额外编译了一次gecko层和gaia层的源码,途中有点小报错,但问题解决,刷机,开机,一切正常。heppy,上几张图
嗯…图片方向反了……
不过我发现B2G系统有系统性问题,好像我不能通过gaia层应用API制作shell工具,而且如果要实现的话我要额外安装node.js(尽管这并不是难事)。
################旧的#########
谢谢你给我的分析意见,我在这里回答一下你的疑问。
-
gdb调试工具是编译系统时自动加进去的,不需要我额外添加,并且系统开机默认不启动gdb服务,B2GOS官方提供了gdb调试的相关文档: https://developer.mozilla.org/en-US/docs/Archive/B2G_OS/Debugging/Debugging_B2G_using_gdb
-
我没有设置断点gdb调试,也没有对MessageChannel.cpp进行修改。我采用的是官方GitHub分支d1276b5b84e6cf7991c8e640b5e0ffffd54575a6的gecko源码进行编译,该版本github链接为:https://github.com/mozilla-b2g/gecko-b2g/tree/d1276b5b84e6cf7991c8e640b5e0ffffd54575a6
MessageChannel.cpp第2057行附近函数代码:
这里应该只是一个console报错输出函数
MessageChannel.cpp代码链接:https://github.com/mozilla-b2g/gecko-b2g/blob/d1276b5b84e6cf7991c8e640b5e0ffffd54575a6/ipc/glue/MessageChannel.cpp#L2057
另外,在崩溃log段:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 1100 (Compositor)
I/DEBUG ( 275): property debug.db.uid not set; NOT waiting for gdb.
I/DEBUG ( 275): HINT: adb shell setprop debug.db.uid 100000
I/DEBUG ( 275): HINT: adb forward tcp:5039 tcp:5039
我理解的意思是系统出现Fatal signal 11崩溃,但是发现我没有给debug.db.uid赋值(100000),所以系统认为不需要在这里断点以及等待gdb调试的干预,然后直接继续运行下去,并且系统还提示如果需要断点调试要先给系统命令
adb shell setprop debug.db.uid 100000
adb forward tcp:5039 tcp:5039 //建立ADB端口转发
才能启动gdb断点调试。
- 谢谢你给我的建议,的确,MessageChannel.cpp这部分代码和你提供给我的代码存在差异,我有必要分析这部分代码相关后才能知道崩溃是否出自这里。
目前我分析认为应该是未知进程出现了问题(从log中我不能确定是gecko还是Android底层的进程),导致display.qservice、SurfaceFlinger、permission服务死掉而最后才造成MessageChannel.cpp的报错。因为出现
###!!! ABORT: Aborting on channel error.: file /media/bingco/DATA_WIN/B2G/gecko/ipc/glue/MessageChannel.cpp, line 2057
报错前display.qservice、SurfaceFlinger、permission已经死掉(log截图第4473-4476行)。
- Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 1100 (Compositor)
参考你提供给我的建议:
1)头文件路径 ,编译环境发现,用到的头文件位置不同,导致结果差异。通过重新设置头文件路径。
存在这个可能,我会重新检测相关编译环境。
2)机器太老
我移植的是OneplusX手机,基于Android5.1版本,这款手机应该不算上很老的机器,电脑环境为Ubuntu16。
3)你自己的库有问题,。。。
不排除这个可能,O(∩_∩)O谢谢你提供的建议。
4)我感觉是你gdb那里的问题,具体报了文件名了都
是gdb的可能性不大,因为我并没有启动gdb服务。