给hunter___的回复
谢谢你给我的分析意见,我在这里回答一下你的疑问。
-
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服务。