【问题标题】:How do I setup Eclipse to stop on the line an exception occurred?如何设置 Eclipse 以停止发生异常的行?
【发布时间】:2011-01-29 02:37:55
【问题描述】:

如何设置 Eclipse 以在发生异常时停止。

我有一个 Eclipse 断点设置来中断异常。在下面的代码示例中,我遇到的问题是 Eclipse 尝试打开 Integer 源代码。有没有办法让调试器在我的代码示例中显示的点中断?如果我向下移动堆栈跟踪,我将到达这一行,如果有一种方法可以在不出现“未找到源”窗口的情况下执行此操作,那就太好了。

这可以在 Visual Studio 中完成,所以无法在 Eclipse 中找到方法让我发疯。

package com.test;

public class QuickTest
{
  public static void main(String[] args)
  {
    try
    {
        test();
    }
    catch(NumberFormatException e)
    {
        System.out.println(e.getMessage());
    }
 }

  private static void test()
  {
    String str = "notAnumber";

    Integer.parseInt(str);//<----I want debugger to stop here
  }
}

 

【问题讨论】:

    标签: java eclipse debugging exception


    【解决方案1】:
    1. 不能在Integer.parseInt(str) 行设置断点吗?
    2. 如果您将 Eclipse 项目指向使用 JDK 而不是 JRE,它应该获取所有平台类(Integer 等)的源代码。

    【讨论】:

    • 我试图避免打开 Integer 类。我只是想让它解决我的代码问题。设置断点无济于事,因为这只是一个简单的示例。真实代码有数百个类等
    • 您的意思可能是说“JDK”而不是“JVM”(?)
    • 因为不知道哪里会出现异常。我试图让调试器停止在导致异常的行上。我不能在可能发生异常的任何地方都设置断点,否则我会有数千个异常。在 Visual Studio .Net 中,我可以将其设置为在任何异常时停止。当我在 Eclipse 中执行此操作时,它想尝试打开发生异常的源代码。
    • 您知道您可以单步执行代码,对吧?您只需在知道异常被抛出的位置之前在某处放置一个断点,然后继续下一行,依此类推。
    • @Chris,当这种情况发生并且您实际上在调用堆栈中的位置比您希望的更靠后时,请使用 saugata 建议的方法,以便能够将调用堆栈返回到您编码调用的位置Integer.parseInt
    【解决方案2】:

    首选项 -> Java -> 调试 -> 步骤过滤 调试时选择要过滤掉的包(java.*, sun.*, etc) 在调试时确保选中小步过滤箭头。

    这应该可以解决问题。

    【讨论】:

    • 酷!我一直想知道如何做到这一点!
    • 在设置断点以中断异常时看起来不起作用:(
    • 如果你按下回车键,在那个点上跳过或落到帧呢?不确定它是否会起作用,但它是一个镜头。
    • 是的,我也试过了,它似乎没有在异常断点上使用单步过滤器,只有在单步调试模式时才使用。您在这里唯一的选择可能是查看调试窗口中的堆栈跟踪,它将从 Integer 抛出异常。向下滚动,直到找到要检查的调用代码,然后单击该行。它将显示您感兴趣的来源。
    【解决方案3】:

    调试视图将显示当前执行的整个堆栈。您需要选择要查看的行。就像你在那里有一个断点一样,你可以看到所有的变量等等。

    【讨论】:

      【解决方案4】:

      我不知道怎么去那里,但我只是这样做:

      Window -> Show View -> Breakpoints
      

      在那个标签中有一个“J!”这让您可以在异常上设置断点。

      【讨论】:

      • 是的,这就是我使用的。除了在我的示例中,它尝试打开 Integer 源代码。我不想打开 Integer 源代码。我只想让调试器停在 'Integer.parseInt(str);'
      • 调试器将在抛出异常时停止(这是您要求它执行的操作),并将始终在引发异常的源代码行打开编辑器 - 在本例中为 Integer.parseInt( )。整个调用堆栈也会显示出来,您可以点击相应的级别查看该级别的源代码。
      • 然后您可以使用调用堆栈返回您自己的代码,它没有真正的方法可以神奇地决定您认为有趣的堆栈级别。你真的应该接受这个答案。
      • 我不明白为什么你必须选择特定的例外。我只是希望它能够捕获所有内容,因为我认为在代码中的某处抛出并捕获/忽略了异常......只需添加“异常”就可以解决问题吗?
      猜你喜欢
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 2010-11-09
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多