如何获取Java中的当前堆栈跟踪?

139 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

“如何获取Java中的当前堆栈跟踪?

我如何在Java中获取当前的堆栈跟踪,就像在.NET中可以做到的那样Environment.StackTrace?

我找到了,Thread.dumpStack()但这不是我想要的-我想找回堆栈跟踪信息,而不是打印出来。

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

您可以使用Thread.currentThread().getStackTrace()。

这将返回一个StackTraceElements数组,该数组代表程序的当前堆栈跟踪。

高分回答:

Thread.currentThread().getStackTrace();

如果您不在乎堆栈的第一个元素,那就很好了。

new Throwable().getStackTrace();

如果重要的话,将为您当前的方法定义位置。

高分回答:


Thread.currentThread().getStackTrace();

从JDK1.5开始可用。

对于较旧的版本,您可以重定向exception.printStackTrace()到StringWriter():

StringWriter sw = new StringWriter();
new Throwable("").printStackTrace(new PrintWriter(sw));
String stackTrace = sw.toString();

文章翻译自 yl2gl72eozkinivz3vc6swkesy-ac4c6men2g7xr2a-translate.translate.goog/questions/1…

作者建议:我在出现内存溢出或者内存泄漏时会关心我的堆栈信息,如果在windows直接可以打开bin文件下的jvisualvm,如果在linux可以通过jmap来看占用最多的堆,jstack查看线程的堆栈信息,也可以使用阿尔萨斯来分析。

图片.png

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️