1.java调用栈输出
Log.e("JavaTrace", "print trace begin:");
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for(int i = 1; i < elements.length; i++) {
StackTraceElement se = elements[i];
Log.e("JavaTrace", "\tat " + se.getClassName() + "." + se.getMethodName() + "(" + se.getFileName() + ":" + se.getLineNumber() + ")");
}
Log.e("JavaTrace", "print trace end");
2.c/c++调用栈
网上有些使用CallStack输出的方法,但是使用起来要导库,还要适配不同的版本。这里介绍一个使用debuggerd获取的方法。
1.保留当前堆栈现场
找到需要关注的函数,在这里 sleep(60),便于后续操作
运行时,通过ps命令查看进程号
2.获取当前堆栈信息
adb shell debuggerd -b 进程号 > trace.log
3.解析堆栈信息
之前介绍过stack,这里也可以使用它解析第二步的文件。点击直达