8大你不得不知的Android调试工具(2)

2) dalvik利用管道加线程的方式,先利用dup2把stdout和stderr重定向到管理中(vm/StdioConverter.c:dvmstdioConverterStartup),然后再启动一个线程从管道另一端读出内容(dalvik/vm/StdioConverter.c:stdioconverterThreadStart()),使用LOG公共工具(system/core/liblog/logd_write.c: __android_log_print())输出到/dev/log/*中去

3) logcat通过加不同参数看/dev/log/下的不同输入信息

# logcat -b main 显示主缓冲区中的信息   # logcat -b radio 显示无线缓冲区中的信息   # logcat -b events 显示事件缓冲区中的信息 

7. jdwp(java debug wire protocol)及原理

1) 虚拟机(设备端)在启动时加载了Agent JDWP 从而具备了调试功能。在调试器端(PC端)通过JDWP协议与设备连接,通过发送命令来获取的状态和控制Java程序的执行。JDWP 是通过命令(command)和回复(reply)进行通信的。

2) JDK 中调试工具 jdb 就是一个调试器,DDMS也提供调试器与设备相连。

3) dalvik为JDWP提供了两种连接方式:tcp方式和adb方式,tcp方式可以手工指定端口,adb方式自动设定为8700端口,通常使用DDMS调试就是通过adb方式

8. monkey

1) monkey是一个android自带的命令行工具。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。

2) 方法
在设备端打开setting界面
$ adb shell
# monkey -p com.android.settings -v 500
此时可以看到界面不断被切换

9. 其它小工具
具体见android.os.Debug中提供的工具

1) 取毫微秒级的时间,用于计算时间
threadCpuTimeNanos()

2) 统计两点间的内存分配情况

startAllocCounting()   stopAllocCounting()   getGlobalAllocCount()   get….. 

3) 打印当前已load的class
getLoadedClassCount()
printLoadedClasses() 它需要打开NDEBUG功能才能打开system/core/中Log功能

10. 打印debug信息
 

$ adb bugreport 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxssp.html