打印调用栈

打印调用栈

我们在实际开发中经常会遇到两种种情况:

  • 1.是谁调用了这个函数,为什么程序会跑到这里来了?
  • 2.我们要分析代码的调用流程。

我们首先应该都会 grep 一下,或者使用 source insight 等工具搜一下调用函数,一般情况下就能解决问题。但是当遇到情况很多调用,情况又十分复杂的使用就要使用我们的必杀技,打印调用栈。

一.先看java层的

java层的比较简单 ,只需要使用下面的函数就能打印出来。
在需要打印的函数中加入

Log.d("haha",Log.getStackTraceString(new Throwable()));

修改之后在命令行使用logcat

logcat -s haha

当有运行到这个函数时就能打印出调用的函数调用光系,如下图:
在这里插入图片描述
补充:
异常时打印当前堆栈
catch中加入 Exception::printStackTrace()就能把调用栈打印出来


二.c / c++

android 4.4 平台使用的例子
加入头文件并在需要打印的函数中使用下面的函数

#include <utils/CallStack.h>
android::CallStack stack("haha");

之后同java一样使用

logcat -s haha

当有运行到这个函数时就能打印出调用栈,如下图:



三.内核

直接在要打印调用栈的函数中加入这个函数,当函数执行到这里,就会通过串口(cat /proc/kmsg)看到信息输出。
dump_stack();

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值