第一次进入递归函数的断点

时间:2014-04-10 16:28:30

标签: java eclipse recursion breakpoints conditional-breakpoint

是否可以创建一个断点,其中条件是它是递归过程的开始?换句话说,堆栈应该只有一个函数调用。

IE考虑这个工作流程:

主要功能 - > call recursive func - >点击断点 - >继续 - >递归调用self - >不打破断点 - >继续递归。

3 个答案:

答案 0 :(得分:4)

试试这个:

if(!Thread.currentThread().getStackTrace()[2].getMethodName().equals("this method's name"))
     // breakpoint

2是因为getStackTrace将返回实际的getStackTrace方法作为堆栈的一部分,方法名称,然后返回我们想要的调用方法。

答案 1 :(得分:1)

除非你以编程方式创建断点,否则我不这么想你为了实现这个目的而破坏你的代码。

将断点保持在递归函数内,然后右键单击断点并选择断点属性输入命中计数1.在第一次点击断点后它将被禁用。 / p>

答案 2 :(得分:0)

您需要在递归函数中添加一个参数,该函数的作用是跟踪递归的深度。当您执行递归调用时,传入当前深度值加1,因此它会在每次调用时递增。然后根据深度==设置一个断点。这样的事情(阶乘示例):

public static int fact(int n, int depth)
{
  if(n <= 1)
    return 1;
  return n* fact(n-1, depth +1);
}

或者,某些IDE允许您根据命中一行代码的次数设置断点。您可以尝试使用它。