调试ART虚拟机

栏目: 服务器 · 发布时间: 7年前

内容简介:之后将如果出现如下错误:

编译

mmm art/runtime 单独编译art模块即可。

之后将 ANDROID_PRODUCT_OUTsystem/lib/libart.so system/lib64/libart.so system/lib/libartd.so system/lib64/libartd.so 分别推送到手机对应的位置,来更新手机中的 art 虚拟机模块。

如果出现如下错误:

'/system/lib/libart.so': remote couldn't create file: Read-only file system

说明无权限。使用如下脚本关闭权限验证:

adb root &> /dev/null && sleep 0.3
adb wait-for-device &> /dev/null && sleep 0.3
adb remount &> /dev/null && sleep 0.3
adb disable-verity && sleep 0.3

看到下面字样即可。

Verity already disabled on /system

AndroidStudio

Android Studio 2.3开始支持 lldb 来调试 Native代码。

设置

打开 Edit configuration ,在 Debugger 中将 Debug type 设定为 Native。表示当前调试类型为 Native。如下:

调试ART虚拟机

同时可以在 Symbol Directories 添加符号表文件夹。

aosp 编译成功之后的符号表都存在于:

out/target/product/${device}/symbols

可以按照顺序将 aosp 或者其他符号表目录存放与此。在运行时 AndroidStudio(lldb) 会自动按照目录顺序搜到为止。

运行

点击 debug 运行之后,可以看到如下输出:

$ adb shell cat /data/local/tmp/lldb-server | run-as com.qihoo360.replugin.sample.host sh -c 'cat > /data/data/com.qihoo360.replugin.sample.host/lldb/bin/lldb-server && chmod 700 /data/data/com.qihoo360.replugin.sample.host/lldb/bin/lldb-server'

$ adb shell cat /data/local/tmp/start_lldb_server.sh | run-as com.qihoo360.replugin.sample.host sh -c 'cat > /data/data/com.qihoo360.replugin.sample.host/lldb/bin/start_lldb_server.sh && chmod 700 /data/data/com.qihoo360.replugin.sample.host/lldb/bin/start_lldb_server.sh'

Starting LLDB server: /data/data/com.qihoo360.replugin.sample.host/lldb/bin/start_lldb_server.sh /data/data/com.qihoo360.replugin.sample.host/lldb unix-abstract /com.qihoo360.replugin.sample.host-0 platform-1557307585973.sock "lldb process:gdb-remote packets"
Debugger attached to process 2607
Signal: SIGSTOP (signal SIGSTOP)

App启动完了之后就完成了 Debug 的第一步了。

断点

因为没有设置任何断点,并且只有符号表会有点无所适从。

这时可以尝试 pause program 如下:

调试ART虚拟机

此时会弹出本地的源码,接下来就能在源代码中添加断点了。

效果如下:

调试ART虚拟机

远程编译

正常来说,能在本地编译并且断点是很顺滑的事情。但是,很多时候可能需要使用别人编译出来的结果,或者你想在一台服务器上面进行编译。

但是问题在于我们的符号表记录了编译时的源码路径,而这个路径在另外电脑可能不存在。这时候就需要路径映射了。

如下方式可以查看符号表中的源码路径:

image lookup -vn CollectGarbageInternal

可以得到如下结果:

调试ART虚拟机

找到原始路径之后映射成本地路径即可。

settings set target.source-map <original> <local>

参考

By@hyongbai 共2123个字

本文链接


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都在说谎

人人都在说谎

赛思·斯蒂芬斯--达维多维茨 / 胡晓姣、张晨、左润男 / 中信出版集团 / 2018-11 / 58

有多少人买了书真正看完了? 你朋友的酒量有他说的那么大吗? 父母是否暗自喜欢男孩儿多于女孩儿? 电影里暴力镜头增多会导致犯罪率升高吗? 种族歧视在现如今的美国还严重吗? 特朗普的胜利有征兆吗,什么促成他赢得了大选? …… 你知道问题的答案吗,直觉会怎样告诉你? 作者赛思·斯蒂芬斯--达维多维茨是一位前谷歌数据科学家和专栏作家。他的研究发现,世界充满了......一起来看看 《人人都在说谎》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具