当方法在Eclipse调试器中返回null时断开

时间:2013-09-24 09:36:51

标签: eclipse debugging conditional-breakpoint

我正在研究表达式评估器。根据处理的表达式的复杂性,有一个evaluate()函数被多次调用。

我需要打破并调查此方法何时返回null。有许多路径和返回语句。

可以在退出方法事件中断,但我找不到如何对返回的值设置条件。

3 个答案:

答案 0 :(得分:2)

您没有说明您使用的语言。如果是Java或C ++,您可以使用断点属性在Method(或Function)断点上设置条件。以下是显示两种情况的图像。 在Java示例中,您将取消Entry并在Exit中签入。

Java方法断点属性对话框

Java breakpoint properties

C ++函数断点属性对话框

C++ Breakpoint properties

答案 1 :(得分:2)

我也陷入了这种挫败感。可以检查(并写入条件)命名变量,但不能检查未命名的返回值。以下是一些想法(对于可能感兴趣的人):

  1. 一个可能在断点条件中包含evaluate() == null之类的内容。执行的测试(Eclipse 4.4)显示,在这种情况下,函数将再次执行以用于断点目的,但这次断点已禁用。所以至少你会避免堆栈溢出的情况。 这是否有用,取决于所考虑的函数的性质 - 它会在断点时返回与运行时相同的值吗?(有些s [a |我填写代码来测试:)
  2. class TestBreakpoint {
        int counter = 0;
        boolean eval() { /* <== breakpoint here, [x]on exit, [x]condition: eval()==false */
            System.out.println("Iteration " + ++counter);
            return true;
        }
        public static void main(String[] args) {
            TestBreakpoint app = new TestBreakpoint();
            System.out.println("STARTED");
            app.eval();
            System.out.println("STOPPED");
        }
    }
    // RESULTS:
    // Normal run: shows 1 iteration of eval()
    // Debug run: shows 2 iterations of eval(), no stack overflow, no stop on breakpoint
    
    1. 使更容易(可能在将来进行调试)的另一种方法是使编码约定(或个人编码风格)需要一个声明本地的在函数内部设置的变量,最后只返回一次。 E.g:
    2. public MyType evaluate() {
          MyType result = null;
          if (conditionA) result = new MyType('A');
          else if (conditionB) result = new MyType ('B');
          return result;
      }
      

      然后,您至少可以使用result == null之类的条件执行退出断点。但是,我同意这对于简单的函数来说是不必要的冗长,与语言允许的流程有点相反,并且只能手动强制执行。 (就个人而言,我有时会使用此惯例来处理更复杂的功能(名称result&#39;保留&#39;仅供此用途),可能使事情更清晰,但不是为了简单的功能。但是很难划清界线;只是今天上午必须通过一个简单的功能来查看3个可能的情况中的哪一个是被解雇的。对于今天的复杂系统,人们想要避免踩踏。)

      1. 除上述内容外,您需要根据具体情况修改代码,如上一点所示,单个函数将返回值分配给某个变量,您可以对其进行测试。如果某些工作策略不允许你进行这样的非功能性更改,那么就会陷入困境......当然,如果原始代码有点复杂,这样的重写当然也可能导致无意中解决的错误,所以在调试之后要小心恢复到原来的状态,只是发现bug现在又回来了。

答案 2 :(得分:1)

Eclipse调试器尚不支持此功能,并将其添加为增强请求。如果你投票,我会很感激。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=425744