Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在eclipse上显示完整堆栈跟踪?_Java_Eclipse - Fatal编程技术网

Java 如何在eclipse上显示完整堆栈跟踪?

Java 如何在eclipse上显示完整堆栈跟踪?,java,eclipse,Java,Eclipse,我正在使用Eclipse调试Java应用程序。在代码的某个地方,我得到了一个异常和堆栈跟踪: Caused by: java.io.EOFException: The connection has been reset while reading the header at com.gemstone.gemfire.internal.cache.tier.sockets.Message.fetchHeader(Message.java:583) at com.gemstone.g

我正在使用Eclipse调试Java应用程序。在代码的某个地方,我得到了一个异常和堆栈跟踪:

Caused by: java.io.EOFException: The connection has been reset while reading the header
    at com.gemstone.gemfire.internal.cache.tier.sockets.Message.fetchHeader(Message.java:583)
    at com.gemstone.gemfire.internal.cache.tier.sockets.Message.readHeaderAndPayload(Message.java:599)
    at com.gemstone.gemfire.internal.cache.tier.sockets.Message.read(Message.java:542)
    at com.gemstone.gemfire.internal.cache.tier.sockets.Message.recv(Message.java:1029)
    at com.gemstone.gemfire.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:158)
    at com.gemstone.gemfire.cache.client.internal.AbstractOp.attempt(AbstractOp.java:363)
    at com.gemstone.gemfire.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:229)
    at com.gemstone.gemfire.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:321)
    at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:646)
    at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:108)
    ... 11 more
如何获得整个堆栈而不是
。。。还有11个

您拥有整个堆栈

这只是堆栈跟踪的一部分。就在这之前是另一件作品。看看这一条的底线和上一条的顶线。你会看到他们匹配。堆栈跟踪以一个不以“引起原因”开头的部分开始

“原因”异常隐藏堆栈跟踪的部分,这些部分是其父级中堆栈跟踪项的逐字副本。换句话说,Java并没有针对每一个原因显示到main()的整个堆栈——它只是显示了您尚未看到的内容。看


当您在创建可丢弃文件时提供原因时,将填充“原因”。看看构造器。当一段代码捕获到一个低级异常,然后希望将其作为另一个异常类重新提交时,就可以执行此操作

正如Ed所说,它显示了整个堆栈,但遗漏了您已经看到的信息。看

从那里引述:

请注意,存在包含字符“…”的行。这些 行表示此堆栈的剩余堆栈跟踪 “异常”与从屏幕底部指定的帧数相匹配 由此异常引起的异常的堆栈跟踪 (“封闭”例外)。这种速记法可以大大降低成本 在使用包装异常的常见情况下,输出的长度 从捕获“因果异常”的同一方法引发

通常一个异常被包装;以另一个异常作为原因创建:

try {
    // something which causes an Exception
} catch (Exception e) {
    throw new SpecificException("help", e);
}

在这种情况下,显示stacktrace将创建。。。你看到的还有11个。

我从来没有见过,但是试试这个

public void problemFunction(){
  try{
      //your code
  catch(Exception ex){
     ex.printStackTrace();
  }
}

public void problemFunction(){
试一试{
//你的代码
}
捕获(例外情况除外){
系统输出打印项次(ex);
StackTraceElement[]arr=ex.getStackTrace();

对于(int i=0;i我认为这意味着在调用
printStackTrace
之前,
异常被捕获并打包成另外11次

尝试并计算以下程序的输出,以便更好地理解:

public class PrintStackTrace {

    public static void main(String[] args) {
        try {
            level1();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            level2();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    static void level2() throws Exception {
        try {
            level1();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    static void level1() throws Exception {
        try {
            throwingMethod();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    static void throwingMethod() throws Exception {
        throw new Exception("throwingMethod");
    }

}

上面的答案并不准确,每次堆栈显示“由”引起的这意味着异常经过一个或多个方法,直到被捕获,然后再次抛出。这种情况可能会发生很多次,堆栈跟踪不是一个循环,而是一个方向,因此不,顶部的内容与底部的内容无关,最重要的部分在底部,即exc的根eption,如果您有:

main类中出现异常:诸如此类 …代码行。。。 由FileNotFoundException引起 …代码行。。。 原因:异常异常异常 …代码行。。。 原因:NullPointerException

然后,您就不想太多地关注FileNotFoundException,而是想更多地关注NullPointerException。比如说,您有一个包含文件名的属性文件。如果意外使用mykey,则要查找属性“mykey”,则propertiesResource将返回一个null,该null将通过所有代码行(希望如此)被抛出到最后一个catch块所在的应用程序中,在这个点上,它将被“包装”为FileNotFoundException而不是nullException…

我们可能偏离了他面临的实际问题。我也遇到过类似的问题,结果是我的限制控制台的“输出”框被打上了标记。在我移除它后,我能够看到完整的堆栈跟踪。 步骤: 右键单击console | | ctrl+单击if mac
转到首选项并按照上面的说明进行操作

有一个vmargs选项

 -XX:-OmitStackTraceInFastThrow

这在某些情况下可能会有所帮助。

Eclipse控制台窗口应该会显示整个异常。此跟踪打印在哪里?在处理web应用程序时,我在浏览器中看到过类似这样的有限跟踪,但在控制台中从未看到过有限的跟踪。我不知道,这正是我试图找到的。问题是我的断点没有激活vated,所以我无法找到确切的位置。你是什么意思?我所问的是“你在哪里看到这个”?它是在Eclipse IDE界面的一部分(特别是控制台)中,还是显示在其他窗口或文件中?哦,是Eclipse控制台。我想你是说printStackTrace()在哪里call…@Luchian-这只是堆栈跟踪的一部分。在这之前是另一个片段。看看这一个的底行和上一个的顶行。你会看到它们匹配。堆栈跟踪以一个不以“引起原因”开头的部分开始.对…好吧,我想我被卡住了。我想早些时候捕获异常。问题是,我设置了一个断点,将异常明显抛出但未触发的位置设置为…@LuchianGrigore-您可以为特定异常设置断点,而不是一行代码。在调试透视图的“断点”选项卡中,有一个带有“J!”o的按钮n it.按下它!不知道我们有多大的分歧,已经4年了:)不再面对这个问题…哈哈。我实际上是在面对这个问题。所以把它放在那里,这样当其他人在eclipse中看不到完整的堆栈跟踪时,就不会分心了。四年过去了。
 -XX:-OmitStackTraceInFastThrow