是否可以创建一个断点,其中条件是它是递归过程的开始?换句话说,堆栈应该只有一个函数调用。
IE考虑这个工作流程:
主要功能 - > call recursive func - >点击断点 - >继续 - >递归调用self - >不打破断点 - >继续递归。
答案 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允许您根据命中一行代码的次数设置断点。您可以尝试使用它。