Android 打印native堆栈

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,文件内容如下:
Android 打印native堆栈

(2)在external/freetype/Android.bp中添加库libutilscallstack,将刚才创建的callstak.cpp添加到srcs里面:
Android 打印native堆栈

Android 打印native堆栈

注:liblog 用于打印log,在callstak.cpp 中有使用<android/log.h>

(3) 在文件/external/freetype/src/base/ftobjs.c中添加如下代码。
Android 打印native堆栈

Android 打印native堆栈

完成上面步骤后,重新编译代码,执行结果如下:
Android 打印native堆栈

kernel 代码打印堆栈

kernel打印堆栈的方式很简单,使用如下方式就可以实现:

dump_stack();

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程