`
20386053
  • 浏览: 430536 次
文章分类
社区版块
存档分类
最新评论

一种显示函数被调用的堆栈信息的方法

 
阅读更多

如果你想直观的知道某个函数是如何被其他函数层层调用的,只需将如下函数findCaller()添加到该函数中,之后就可以通过logcat查看调用过程。

import java.lang.Throwable;
import java.lang.StackTraceElement;
import android.util.Log;

public void findCaller() {  
    final Throwable mThrowable = new Throwable();  
    final StackTraceElement[] elements = mThrowable.getStackTrace();  
    final int len = elements.length;  
    StackTraceElement item = null;  
    for (int i = 0; i < len; i++) {  
        item = elements[i];  
        Log.i("caller", "Position: " +   
                item.getClassName() + "." + item.getMethodName()  
                + " ---" + item.getLineNumber() + " line");  
    }  
}


分享到:
评论

相关推荐

    函数调用与堆栈

    自动生存期:局部变量和函数形参一般都具有自动生存期,它们的内存空间在程序执行到定义它们的复合语句(包括函数体)时才分配,当定义它们的复合语句执行结束时内存被收回。 动态生存期:具有动态生存期的变量的生存...

    C基础下的函数堆栈

    函数堆栈实际上使用的是程序的堆栈内存空间,虽然程序的堆栈段是系统为程序分配的一种静态数据区,但是函数堆栈却是在调用到它的时候才动态分配的。

    [详细完整版]单片机的堆栈.doc

    堆栈是一种数据结构。一直以为堆栈是一个寄存器,惭愧!教科书定义:所谓堆栈,就是 只允许在其一端进行数据插入和数据删除的线性表。51单片机的单片机的堆栈是在内部 RAM中开辟的。这句话表明了堆栈的位置。 那么...

    函数调用约定与函数名称修饰规则.pdf

    调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。 在...

    API之网络函数---整理网络函数及功能

    GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 GetFileSize 判断文件长度 GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从...

    C/C++函数调用的几种方式总结

    函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。 在参数传递中,有两个重要的问题必须要...

    java堆栈详解.pdf

    Java 把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的 一些基本类型的变量和对象的引用变量都是在函数 的栈内存中分配。当在一段代码块中定义一个变量时,java 就在栈中 为这个变量分配内存空间...

    外部函数接口LibFFI.zip

    “FFI” 的全名是 Foreign Function Interface,通常指的是允许以一种语言编写的代码调用另一种语言的代码。而 “Libffi” 库只提供了最底层的、与架构相关的、完整的”FFI”,因此在它之上必须有一层来负责管理两种...

    论文研究-基于两层隐马尔可夫模型的入侵检测方法.pdf

    提出一种利用进程堆栈中的函数返回地址链信息来提取不定长模式的方法。同王福宏的不定长模式提取方法相比,该方法可以取得更完备的模式集。在此基础上,基于系统调用序列及其对应的不定长模式序列构建了一个两层隐...

    详解python函数传参是传值还是传引用

    函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。 值传递(passl-by-value)过程中,被调函数的形式参数作为被...

    java堆栈的区别 -- 详解

    栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是...

    华为笔试题目题库大全

    3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不...

    华为笔试题(有史以来最全).doc

    3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不...

    VB指针葵花宝典之函数指针的配套代码。

    而且qsort要嵌套调用(不嵌套在VB里也慢),我们还要尽量节约堆栈,虽然1M的默认堆栈大小可以被扩充(有相邻的空闲空间时),但是我们依然要考虑可能存在的溢出,所以我做的qsort仅两个参数,两个局部Long型变量。...

    链接库知识锦集

    这是一种函数调用约定,什么是函数调用约定? 函数调用约定是指当调用一个函数时,参数会被传递给被调用函数和返回值会被传递给调用参数,函数调用约定就是描述参数是怎么被传递的和有谁平衡堆栈的,当然还有返回值...

    stack_unwinding:stack_unwinding是仅用于C ++的小型头文件库,它提供原语(unwinding_indicator类)来确定何时由于堆栈展开或正常作用域离开而调用对象析构函数

    stack_unwinding是一个仅用于标头的小型C ++库,它提供原语(类unwinding_indicator)来确定何时由于堆栈展开或正常作用域离开而调用对象析构函数。 unwinding_indicator包含在单个头文件中: 在unwinding_...

    python 函数传参之传值还是传引用的分析

     函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。  值传递(passl-by-value)过程中,被调函数的形式参数...

    Xtensa处理器窗寄存器函数调用机制与应用

    这样频繁的堆栈存储器访问将明显降低应用程序的性能,为有效解决这一问题,Tensilica的Xtensa架构设计了一种Windows旋转方式的寄存器管理机制,将逻辑寄存器和物理寄存器分开,在函数调用的时候通过windows滑动切换...

    最新华为面试题集合

    3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不...

Global site tag (gtag.js) - Google Analytics