【问题标题】:Stop on breakpoint when class present in stacktrace当堆栈跟踪中存在类时在断点处停止
【发布时间】:2018-11-20 10:27:52
【问题描述】:

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

第一次从SomeClass.doSomething() 执行时,它在Utils.doSomething() 处停止,但在下一行再次执行Utils.doSomething() 时,它并没有停止。

通过SomeClass.doSomethingElse()执行时正确地不会停止

【问题讨论】:

    标签: java debugging intellij-idea


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我想你要找的东西在这里:

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

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

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

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

      所以看起来你需要在SomeClass.doSomething() Line 上设置一个,然后在Utils.doSomething() 方法中需要它的任何地方

      【讨论】:

      • 这不完全是我想要的。它在选定断点被击中后在断点处停止,但它会禁用,直到再次击中选定的断点(预期的),但我希望每次在堆栈中传递此断点时都停止。我已经编辑了我的问题以添加示例。
      • 是的,它按预期工作,它被禁用,直到再次命中断点,但我感兴趣的是断点对当前堆栈保持活动状态。让我们假设这个Utils.doSomething() 在某个循环中运行,然后它只会在第一次迭代时停止。
      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 2014-09-04
      • 2012-01-29
      • 2017-08-31
      • 2010-11-23
      • 2011-01-18
      • 2014-05-16
      • 1970-01-01
      相关资源
      最近更新 更多