Android 打印native堆栈,本文介绍如何在Android Native C++ 和 C 代码中打印堆栈,也会介绍在 Kernel 代码中打印堆栈的方法。
Native C++ 代码打印堆栈
Native C++ 代码中要打印堆栈并不复杂,只要使用已有的类CallStack
就可以,它放在system/core/libutils
下面,使用它之前需要将库libutilscallstack
包进来,步骤如下:
(1)首先在Android.bp
中添加库libutilscallstack
,方法如下:
shared_libs:[
"libutilscallstack",
]
(2)调用CallStack
的文件头部将头文件include
进来:
#include<utils/CallStack.h>
(3) 使用如下方式打印堆栈
Call stack("geek-docs");
Native C 代码打印堆栈
Native C 代码打印堆栈的方式和上面方式比较接近,但是不能直接使用CallStack
,我们这里用一个例子来说明,让大家更容易理解。
例如,我们希望在文件/external/freetype/src/base/ftobjs.c
中的函数FT_EXPORT_DEF
中打印堆栈,方法如下:
(1)首先在文件夹/external/freetype/src/base/
创建文件callstak.cpp
,文件内容如下:
(2)在external/freetype/Android.bp
中添加库libutilscallstack
,将刚才创建的callstak.cpp
添加到srcs
里面:
注:
liblog
用于打印log,在callstak.cpp
中有使用<android/log.h>
(3) 在文件/external/freetype/src/base/ftobjs.c
中添加如下代码。
完成上面步骤后,重新编译代码,执行结果如下:
kernel 代码打印堆栈
在kernel
打印堆栈的方式很简单,使用如下方式就可以实现:
dump_stack();