Android 调试技术
来源:互联网 发布:linux 发送邮件日志 编辑:程序博客网 时间:2024/06/08 19:15
Android 调试技术
一、JAVA层单步调试
参见“用eclipse单步调试Laucher”
参见“用eclipse编译调试adnroid的Browser”
二、Native层单步调试
参见“使用GDB 单步调试Android本地代码”
三、JAVA层堆栈打印
1. 在指定的函数内打印相关java调用
Log.d(TAG,Log.getStackTraceString(new Throwable()));
2. 普通JAVA进程堆栈
ActivityManagerService.dumpStackTraces
保存在系统设置dalvik.vm.stack-trace-file指定的文件data/anr/traces.txt中。可以包含多个进程堆栈信息。
3. 内核进程堆栈
dumpKernelStackTraces,该函数为私有函数,不可调用。
代码在frameworks/base/services/java/com/android/server/Watchdog.java
保存在系统设置dalvik.vm.stack-trace-file指定的文件data/anr/traces.txt中。
4. 出异常时打印当前堆栈
Exception::printStackTrace()
try {
...
}catch (RemoteException e) {
e.printStackTrace();
...
}
5. 输出指定进程的堆栈
Process.sendSignal(pid, Process.SIGNAL_QUIT)
保存在data/anr/traces.txt。
这个只对java进程有效,由dalvikvm的SignalCatcher.c处理。
四、Native层堆栈打印
1. CallStack
使用方式:
#include <utils/CallStack.h> ...
CallStack stack;
stack.update();
stack.dump(""); // the parameter is prefix of dump
在使用之前需要修改system/core/include/arch/linux-arm/AndroidConfig.h
#define HAVE_DLADDR 1
#define HAVE_CXXABI 1
并在文件frameworks/base/libs/utils/Android.mk中大约105行(LOCAL_SHARED_LIBRARIES)后添加
ifeq ($(TARGET_OS),linux)
LOCAL_SHARED_LIBRARIES += libdl
endif
重新编译,push生成的libutils.so到/system/lib/目录下,重启设备。
五、JAVA异常分析
这个android会输出信息到logcat。容易分析。
六、Natvie异常分析
native进程异常会导致
debuggerd会输出信息到logcat并保存到/data/tombstones。
可以修改system/core/debuggerd/debuggerd.c中dump_stack_and_code的代码满足更深的调试信息需求。
七、日志Log系统
在java中使用
import android.util.Log;
...
Log.d(TAG,"log info");
在Native代码中使用
#define LOG_TAG "YOUR_LOGTAG"
...
#include <utils/Log.h>
#define LOG_NDEBUG 0
...
LOGD("log info");
或者
Log.d(LOG_TAG,“log info”);
使用adb logcat时可以只显示特定类别的LOG,还可以通过参数 -v threadtime 显示线程号及时间信息。
普通标准输出转为Logcat
#system/bin/logwrapper 进程名
八、其他调试手段(命令行)
1. 打印指定JAVA进程的堆栈到文件中
#kill -3 pid
这里的3就是3.5节的Process.SIGNAL_QUIT。
输出在data/anr/traces.txt文件中。
这个只对java进程有效,由dalvikvm处理。
2. 打印指定进程的堆栈到Logcat
#kill -11 pid 或者 #kill -7 pid
这个有时有效。其原理是利用了(六)节的机制。
可以用adb logcat看堆栈调用输出。
3. 打印指定进程的系统调用
#strace -f -p pid -o output
主要输出文件、SOCKET、锁等系统操作的信息。
-f表示跟踪所有子进程.
-o输出log到指定文件,可不用。
- android 调试技术补充
- android 调试技术
- Android调试技术汇总
- Android 调试技术
- 【转】Android 调试技术
- android调试技术
- Android 调试技术
- Android 调试技术
- android调试技术
- Android 调试技术
- Android 调试技术
- Android调试技术
- Android 调试技术
- android 调试技术--长期更新
- Android程序调试技术-----很全很强大
- Android开发常用调试技术大全
- Chrome on Android的开发调试技术
- 【Android应用开发技术:应用调试】ADB
- 大数据算法
- 针对ce的特殊winsock库的定义
- Android开发如何去除标题栏title
- 随想
- python模块学习之random
- Android 调试技术
- jsvm代码理解
- 【AngelaBaby杨颖性感公主XP主题】
- 深入Java虚拟机读书笔记(5)
- SHGetFileInfo函数 获取系统文件类型及图标
- 算法数据结构C++实现4-计数排序(counting sort)
- unxi/linux视频地址
- JSVM介绍
- Selenium私房菜系列1 -- Selenium简介