Android 堆栈打印方法

1      Linux Kernel

Kernel里最简单,直接有几现成的函数可以使用:

dump_stack() 这个函数打出当前堆栈和函数调用backtrace后接着运行

WARN_ON(x) 这个函数跟dump_stack很像,它有个条件,如果条件满足了就把stack打出来。

打印出来的结果都在kernel log里,一般dmesg命令就可以看到了

2.        Native C++

+++ b/Android.mk
+LOCAL_SHARED_LIBRARIES += libcutils libutils
+LOCAL_SHARED_LIBRARIES += libutilscallstack

+#include<utils/CallStack.h>

android::CallStack stack("[stack]");

3.        Native C

一个简单方法是用C语言调C++的函数,对,就是extern “C”。

先在项目里加入一个c++文件,比如callstack.cpp,里面是:

#include <utils/CallStack.h>
extern "C" void dumping_callstack(void);
void dumping_callstack(void)
{
    android::CallStack cs("My CallStack Debug");
}

在项目里再加入一个c++的头文件,比如callstack.h,里面是:

void dumping_callstack(void);

在Android.mk里源文件列表LOCAL_SRC_FILES里加入callstack.cpp,并确保libutilscallstack在依赖列表里。

在native C里include callstack.h后直接调用dumping_callstack()就可以了。

4.        Java

Java最简单,它的backtrace最详细,连文件名和行号都打出来了:

Exception e = new Exception("haha");

e.printStackTrace();

log在logcat里看以看到。

大部分内容转自:

 http://blog.sina.com.cn/s/blog_7213e0310102wtge.html

https://www.cnblogs.com/ArsenalfanInECNU/p/14510304.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值