如何在“try {...}”块中调试Java代码?

时间:2012-08-05 23:03:12

标签: java eclipse debugging

我(Java新手)我在Eclipse中运行Java程序(我从SourceForge下载的项目)。当我调试它时,它总是在这个位置结束,这发生在一个50行的try块之后:

catch (Exception ex){
    System.err.println("PROCESSING ERROR: " + ex.getMessage());
    helpFormatter.printHelp(usage, options);
}

如何查找和调试触发此异常的代码行? (即查看行号,检查局部变量,计算表达式等)如果我在捕获后放置一个断点,我看不到任何方法回到原始错误或至少找到行号。我可以单步执行try块中的代码,但是有很多循环,所以这可能非常耗时。

我该如何调试?

6 个答案:

答案 0 :(得分:4)

看看堆栈跟踪。您可以在某处找到inyside一个Eclipse选项卡,或者在捕获异常时直接打印它:

catch (Exception ex){
    ex.printStackTrace();
}

检查堆栈跟踪是快速且最安全地快速查找错误的方法。即使您设置了断点(或者最糟糕的是使用某些打印来查找最后执行的语句),您也无法准确确定发生异常的位置。 事实上,异常可能在调用堆栈中被提升得更深,不一定是在断点之后调用的第一个方法。

答案 1 :(得分:3)

添加“异常断点”。它将停留在问题首次出现的异常的根本原因。

首先确定抛出什么类型的特定异常 - 通过在catch块中设置断点来实现此目的,并查看ex的异常类型(通过在变量窗口中查看)。删除断点,然后按F8继续。

现在添加一个异常断点。这是通过转到Breakpoint视图,然后单击看起来像“J!”的图标来完成的。指定您在前面看到的特定类型。现在运行代码,它应该在抛出异常的位置停止。

另一方面说明:简单地捕捉异常通常不是一个好主意,你最好不要试图捕捉特定类型,尽管你说的不是你的代码。

答案 2 :(得分:1)

在try块的开头设置断点,在调试视图中,您将能够看到所有细节:行号,检查局部变量,计算表达式等

答案 3 :(得分:1)

在try-block的第一行放置一个断点,然后跳到下一行,直到它跳转到catch块。然后你知道你在那条线上有例外。然后你可以检查异常,看看出了什么问题。由于您无法“返回”,您可能会再次调试以查看导致问题的原因。

但是对于大多数情况来说,只需查看堆栈跟踪中指示的行即可。如果要检查状态,可以将断点放在此行中。

答案 4 :(得分:0)

您可以暂时删除try / catch块,以便调试器停止异常。 (您可能需要作弊并将throws Exception添加到方法签名中。)

答案 5 :(得分:-1)

对我来说,最好的调试解决方案是在每个主要代码块之后放置多个Print语句。

System.out.println("1");

//Code1 block

System.out.println("2");

//code 2 block

System.out.println("3");

//code 3 block

System.out.println("4");

通过执行此操作,您可以查看哪个是执行和修改它的最后一个print语句。打印的最后一个数字,然后是catch语句的堆栈跟踪应该有帮助。