当类出现在堆栈跟踪时在断点处停止

时间:2018-11-20 10:27:53

标签: java debugging intellij-idea

当堆栈跟踪中存在特定类时,Intellij中是否有办法创建条件断点?或者,当在此堆栈跟踪中传递特定的断点时。

给出的例子: 假设我们有一些实用程序方法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;

Utils.doSomething()开始执行时,它在SomeClass.doSomething()中停止,但是在下一行再次执行Utils.doSomething()时,它没有停止。

通过SomeClass.doSomethingElse()执行时,它没有正确停止

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是这里:

https://www.jetbrains.com/help/idea/configuring-breakpoints.html

  

要设置当前断点所依赖的断点,请从   禁用,直到选定的断点命中下拉列表。一旦依赖   已设置,禁用当前断点,直到选择了一个   击中。

     

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

     

选择“离开”启用单选按钮以保留当前断点   在选定的断点被击中后启用。

因此,您似乎需要在SomeClass.doSomething()行上设置一个,然后在Utils.doSomething()方法中需要的地方设置

答案 1 :(得分:1)

我想出了添加这种条件的方法,虽然不理想,但确实可以完成工作

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