`

运行时获取方法调用堆栈信息(java)

 
阅读更多

前几日系统流程回调时,一个方法莫名其妙被调用,无法定位调用点。最后打印堆栈调用信息,找到问题点。

具体使用如下:

 在需要跟踪的方法中嵌入如下代码(当然AOP是个更好的选择):

        Throwable ex = new Throwable();
        StackTraceElement[] stackElements = ex.getStackTrace();

        if (stackElements != null) {
            for (int i = 0; i < stackElements.length; i++) {
                System.out.println(stackElements[i].getClassName());//返回类的完全限定名,该类包含由该堆栈跟踪元素所表示的执行点。
                System.out.println(stackElements[i].getFileName());//返回源文件名,该文件包含由该堆栈跟踪元素所表示的执行点。
                System.out.println(stackElements[i].getLineNumber());//返回源行的行号,该行包含由该堆栈该跟踪元素所表示的执行点。
                System.out.println(stackElements[i].getMethodName());//返回方法名,此方法包含由该堆栈跟踪元素所表示的执行点。
                System.out.println("-------------第"+i+"级调用-------------------");
            }
        }

 

示例结果如下:

Data.java
5
finish
-------------第0级调用-------------------
cn.sccl.Test
Test.java
6
main
-------------第1级调用-------------------

分享到:
评论

相关推荐

    java 面试题 总结

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行时常量池...

    Java虚拟机

    2.4.3 方法区和运行时常量池溢出 2.4.4 本机直接内存溢出 2.5 本章小结 第3章 垃圾收集器与内存分配策略 3.1 概述 3.2 对象已死吗 3.2.1 引用计数算法 3.2.2 可达性分析算法 3.2.3 再谈引用 3.2.4 生存...

    ansible-javax:Ansible模块,用于执行任意java类或jar

    当您的应用程序需要各种选项(例如最大堆大小或线程堆栈)并且具有大量的类路径和系统属性都在命令行上定义时,事情很快就会变得复杂和混乱。 javax模块为您提供了人类可读的参数名称和本机数据结构值,以使您可以...

    互联网笔试题java-cloud-debug-java:Java云调试器

    快照从执行快照位置的任何一个实例中捕获调用堆栈和变量。 每当应用程序的任何实例执行日志点位置时,日志点都会将格式化消息写入应用程序日志。 Java 调试器代理目前仅在 Linux 上受支持。 它在 Debian Linux 上...

    word源码java-jniwebshell:jniwebshel​​l

    想到rasp这的类具是基于java、php运行期的堆栈信息进行分析,可以尝试使用jni技术进行绕过。java技术栈中的jni的原理是使用java调用c、c++函数,具体实现的思路是jsp编译为class文件,该class通过jni技术调用另外一...

    新版Android开发教程.rar

    � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...

    android实习报告(1).doc

    运行态是在 屏幕台前位于当前任务堆栈的顶部,即获取焦点的Activity。暂停信息是指失去了焦点 但对于用户仍可见,此状态下当程序处于低内存是仍有可能被消除。停止状态是指完全 被另一个Activity覆盖,但他仍然保留...

    jstack生成的Thread Dump日志.docx

    当线程获得了Monitor,进入了临界区之后,如果发现线程继续运行的条件没有满足,它则调用对象(通常是被synchronized的对象)的wait()方法,放弃Monitor,进入 "Wait Set"队列。只有当别的线程在该对象上调用了 ...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    4.8 从原生代码中调用Java 108 4.8.1 异步通信 108 4.8.2 启用Directors 109 4.8.3 启用RTTI 109 4.8.4 重写回调方法 109 4.8.5 更新HelloJni Activity 110 4.9 小结 110 第5章 日志、调试及故障处理 111 ...

    Android经典蓝牙工具类(cbt)------开关蓝牙、扫描蓝牙设备、连接配对、发送数据、接收数据、获取已配对设备.zip

    集成调试器允许开发者逐行执行代码,设置断点、查看变量值、跟踪调用堆栈等,帮助定位并修复代码中的错误。 测试框架和工具则协助开发者编写和运行单元测试、集成测试及性能测试,确保软件质量。 版本控制与协作...

    WiiRemoteJRuby:用于处理 WiiRemoteJ 库的包装器

    Neurogami::WiiRemoteJRuby 詹姆斯·布里特 / Neurogami描述: 一组 Ruby 库,可以更好地调用 WiiRemoteJ Java jar。 旨在与 JRuby 一起使用特点/问题: 为底层 Java 类提供了更多 Ruby 风格的 API。概要从 gems....

    android-crash-reporter

    程序运行过程中如果存在没有try catch的异常,将会交给 Thread.UncaughtExceptionHandler去处理,通过继承该类,并且将默认的异常处理的的类设置为他的一个子类,在子类中对获取的异常信息进行上传到服务器或者做...

    PLSQLDeveloper下载

    集成调试器(要求Oracle 7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何...

    WiiUseJRuby:(J) Ruby 封装了 Wii 遥控器的 WiiUseJ 库

    一组 Ruby 库,可以更好地调用 WiiUseJ Java jar。 旨在与 JRuby 一起使用 特征: 为底层 Java 类提供了更多 Ruby 风格的 API。 概要 从 gems.neurogami.com 安装 gem 在项目的根目录中,运行 wiiusejruby 这将...

    ROS机器人操作系统入门 Tutorials CN版 20150726

    我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。 测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。 扩展性:ROS适合于大型实时系统与...

    tester-caught-point-exceptions

    测试人员捕获点异常描写这是测试人员按此顺序抛出的事件: com.example 1-callCaughtPoint的主体com.example 2-尝试...获取异常-并将其重新抛出com.example 10-捕获catchPoint-异常的打印堆栈用法用Eclipse运行

    eclipse 开发c/c++

    假设您安装了适当的 Java SDK/JRE 和 Eclipse 平台 SDK,并且它们都正常运行。CDT 以两种“方式”可用:稳定的发行版和试运行版(nightly build)。 试运行版未经完全测试,但它们提供了更多的功能并改正了当前错误...

Global site tag (gtag.js) - Google Analytics