是否可以创建一个断点,条件是它是递归过程的开始?换句话说,堆栈应该只有一次对该函数的调用。
IE 考虑这个工作流程:
主函数 -> 调用递归函数 -> 命中断点 -> 继续 -> 递归调用自身 -> 不要命中断点 -> 继续递归。
是否可以创建一个断点,条件是它是递归过程的开始?换句话说,堆栈应该只有一次对该函数的调用。
IE 考虑这个工作流程:
主函数 -> 调用递归函数 -> 命中断点 -> 继续 -> 递归调用自身 -> 不要命中断点 -> 继续递归。
试试这个:
if(!Thread.currentThread().getStackTrace()[2].getMethodName().equals("this method's name"))
// breakpoint
2 是因为 getStackTrace 将返回实际的 getStackTrace 方法作为堆栈的一部分,您的方法名称,然后是我们想要的调用者方法。
我不是这为什么你要破坏你的代码来实现这一点,除非你以编程方式创建断点。
将断点保留在递归函数内,然后右键单击断点并选择断点属性输入命中计数 1。第一次命中断点后,它将被禁用。
您需要向递归函数添加一个参数,该参数的工作是跟踪递归的深度。当你进行递归调用时,传入当前深度值加一,因此它在每次调用时递增。然后根据深度 == 1 设置断点。像这样(阶乘示例):
public static int fact(int n, int depth)
{
if(n <= 1)
return 1;
return n* fact(n-1, depth +1);
}
或者,某些 IDE 允许您根据一行代码被命中的次数设置断点。您可以尝试改用它。