java获取异常堆栈信息-关于StackTraceElement的使用

╰半橙微兮° 2021-06-10 20:38 667阅读 0赞

实际项目中有时候我们需要知道在执行某个方法时,它之前的调用链咋样的,尤其是涉及到多线程时,我们需要知道某个方法到底有没有被调用,除了常用的打印日志外,还可以使用StackTraceElement,talk is cheap ,show the code.

  1. public class Test {
  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. new A().TestA();
  5. }
  6. public void TestInvoke(){
  7. StackTraceElement[] mStacks = Thread.currentThread().getStackTrace();
  8. for(StackTraceElement s: mStacks){
  9. System.out.println("方法名:"+s.getMethodName()+"类名:"+s.getClassName()+"行数:"+s.getLineNumber()+"文件名:"+s.getFileName()+"----"+s);
  10. }
  11. }
  12. }
  13. class A {
  14. public void TestA(){
  15. new B().TestB();
  16. };
  17. }
  18. class B {
  19. public void TestB(){
  20. new Test().TestInvoke();
  21. };
  22. }

打印如下:是不是很简单:

20200429175658377.png

有没有感觉到很像一般的异常抛出啊,其实是对的,Exception中的printStackTrace()最终调用的是Throwable中的getOurStackTrace(),返回的也是StackTraceElement数组

发表评论

表情:
评论列表 (有 0 条评论,667人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java获取异常堆栈信息

    做java开发的时候,经常会遇到代码抛异常后,需要把异常信息保存到数据库或者上传到云服务器做cache分析。这时候就需要获取异常的堆栈信息(详细错误信息)。 有的人用`e.g