4

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

IE 考虑这个工作流程:

主函数 -> 调用递归函数 -> 命中断点 -> 继续 -> 递归调用自身 -> 不要命中断点 -> 继续递归。

4

3 回答 3

6

试试这个:

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

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

于 2014-04-10T16:52:24.670 回答
1

我不是这为什么你要破坏你的代码来实现这一点,除非你以编程方式创建断点。

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

于 2014-04-11T06:51:39.823 回答
0

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

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

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

于 2014-04-10T16:35:33.770 回答