当前位置:  开发笔记 > 编程语言 > 正文

确定当前调用堆栈(用于诊断目的)

如何解决《确定当前调用堆栈(用于诊断目的)》经验,为你挑选了2个好方法。

出于诊断目的,我有时需要存储导致给定状态转换的调用堆栈(例如授予锁定,提交事务等),以便稍后出现问题时我可以找出最初触发状态转换的人.

目前,我知道检索调用堆栈的唯一方法看起来像下面的代码片段,我认为非常难看:

StackTraceElement[] cause;
try {
  throw new Exception();
} catch (Exception e) {
  cause = e.getStackTrace();
}

有人知道更好的方法吗?



1> bruno conde..:

我想你可以得到同样的东西:

StackTraceElement[] cause = Thread.currentThread().getStackTrace();



2> Michael Myer..:

好吧,你可以通过不实际抛出异常来略微改进它.

Exception ex = new Exception();
ex.fillInStackTrace();
StackTraceElement[] cause = ex.getStackTrace();

实际上,我刚检查过:构造函数fillInStackTrace()已经调用了.所以你可以简化它:

StackTraceElement[] cause = new Exception().getStackTrace();

这实际上是Thread.getStackTrace()在当前线程上调用它,所以你可能更喜欢使用它.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有