分类: LINUX
2016-03-31 13:56:25
#include
#include
#include
2.源文件
android::CallStack stack;
stack.update(1, gettid());
stack.log("satcklog", ANDROID_LOG_ERROR, "stackdump:");
或
stack.log("satcklog", (android_LogPriority)6, "stackdump:");
CallStack 的具体定义见: system/core/libutils/CallStack.cpp
debuggerd是android的一个daemon进程,
负责在进程出错异常时,将进程的运行时信息给dump出来供分析。debuggerd的core dump数据,被保存在
/data/tombstone/
目录下(名字取的也很形象,tombstone是墓碑的意思),共可保存10个文件,当超过10个时,会覆盖重写最早生产的文件。在4.2版本
中,debuggerd同时也是一个工具明了,可以在不中断进程执行的情况下打印堆栈。使用方法是:
debuggerd -b pid
2. zygote的堆栈dump
实际上这个可以同时dump java线程及native线程的堆栈,对于java线程,java堆栈和native堆栈都可以得到。
使用方法很简单,直接在adb shell或串口中输入:
kill -3 pid
如果需要在代码中,更容易控制堆栈的输出时机,可以用以下命令获取zygote的core dump:
原理和命令行是一样的。
不过需要注意两点: