首页 > 解决方案 > 当堆栈跟踪中存在类时在断点处停止

问题描述

当堆栈跟踪中存在特定类时,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;

条件为 on 的断点int x = 1;

它在Utils.doSomething()第一次执行时停止,但在下一行再次执行SomeClass.doSomething()时它不会停止。Utils.doSomething()

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

标签: javadebuggingintellij-idea

解决方案


我想出了添加这样的条件,它并不理想,但可以完成工作

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

推荐阅读