如何生成堆栈跟踪?

ast*_*eri 3 java exception stack-trace

程序中没有一个方法"知道"它在堆栈中的位置.它所知道的只是它自己的小工作,它就是这样做并且回归.因此,当抛出异常并打印堆栈跟踪时,它来自何处?

是否隐含地在JVM中的每个应用程序旁边运行一个单独的Thread来监视程序的状态?或者JVM本身是否拥有此信息,并且异常以某种方式在抛出时从中提取数据?

如果是这种情况之一,是否可以使用一些调用来检索堆栈跟踪(来自监视器线程或JVM)而不抛出异常?

kos*_*osa 5

每个线程都有自己的stack.每个方法调用都会创建一个堆栈帧.如果在任何方法的代码中发生了错误,那么它将传播到调用方法.这样JVM可以跟踪哪个方法生成错误以及调用层次结构是什么.

如果正确观察堆栈跟踪,您将看到顶部出现错误的方法和底部的层次结构.

斯坦福大学教授在youtube上有一个很棒的讲座,了解它是如何工作的.我建议看一下.

注意:这是理论.如果您想了解API的工作原理,@ Peter Lawrey的回答可能会对您有所帮助.