Java 在stacktrace中存在类时在断点上停止

Java 在stacktrace中存在类时在断点上停止,java,debugging,intellij-idea,Java,Debugging,Intellij Idea,当stacktrace中存在特定类时,Intellij中是否有方法创建条件断点?或者,当在此stacktrace中传递特定断点时 举例如下: 假设我们有一些实用方法Utils.doSomething,我只想在从SomeClass.doSomething执行此方法时停止 我知道有“禁用直到断点被命中”,但这会使代码在满足初始条件后被命中时停止执行 例如: class SomeClass { void doSomething() { int y = 1; // Breakpo

当stacktrace中存在特定类时,Intellij中是否有方法创建条件断点?或者,当在此stacktrace中传递特定断点时

举例如下: 假设我们有一些实用方法Utils.doSomething,我只想在从SomeClass.doSomething执行此方法时停止

我知道有“禁用直到断点被命中”,但这会使代码在满足初始条件后被命中时停止执行

例如:

class SomeClass {
    void doSomething() {
        int y = 1; // Breakpoint here
        Utils.doSomething();
        Utils.doSomething();
    }

    void doSomethingElse() {
        Utils.doSomething();
    }
}

static class Utils {
    static void doSomething() {
        int x = 1; // Breakpoint with condition here
    }
}

@Test
public void test() {
    SomeClass someInstance = new SomeClass();
    someInstance.doSomething();
    someInstance.doSomethingElse();
    someInstance.doSomething();
}
int y=1上的断点

条件为int x=1的断点

首先从SomeClass.doSomething执行时,它在Utils.doSomething中停止,但在下一行再次执行Utils.doSomething时,它不会停止


当通过某个类执行时,它不会正确地停止。doSomethingElse

我想您要查找的是:

要设置当前断点所依赖的断点,请从 在选定断点命中下拉列表之前禁用。一次依赖 已设置,则当前断点将被禁用,直到选中一个断点为止 击中

选择“再次禁用”单选按钮以禁用当前设置 命中选定断点后的断点

选择离开启用单选按钮以保留当前断点 在命中所选断点后启用


因此,看起来您需要在SomeClass.doSomething行上设置一个,然后在Utils.doSomething方法中的任何需要它的地方

我提出了添加此类条件的方法,它并不理想,但确实起到了作用

Arrays.asList((Thread.currentThread().getStackTrace())).stream()
    .anyMatch(ste -> ste.declaringClass.equals("debugging.SomeClass"))

这不完全是我想要的。在所选断点被命中后,它将在断点上停止,但在再次命中所选断点之前,它是禁用的,这是预期的,但每次在堆栈中传递此断点时,我都希望停止。我已经编辑了我的问题以添加示例。是的,它按照预期的方式工作。它被禁用,直到再次命中断点,但我感兴趣的是,断点对于当前堆栈保持活动状态。让我们假设这个Utils.doSomething在某个循环中运行,然后它将仅在第一次迭代时停止。