Останов на точке останова, когда класс присутствует в stacktrace - PullRequest
0 голосов
/ 20 ноября 2018

Есть ли в 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 голосов
/ 21 ноября 2018

Я придумал добавить такое условие, оно не идеально, но делает работу

Arrays.asList((Thread.currentThread().getStackTrace())).stream()
    .anyMatch(ste -> ste.declaringClass.equals("debugging.SomeClass"))
0 голосов
/ 20 ноября 2018

Я думаю, что вы ищете здесь:

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

Чтобы установить точку останова, от которой зависит текущая, выберите ее из Отключено до выбранной точки останованажмите раскрывающийся список.Как только зависимость установлена, текущая точка останова отключается, пока не будет достигнута выбранная точка.

Выберите переключатель Отключить снова, чтобы отключить текущую точку останова после достижения выбранной точки останова.

Выберите переключатель Оставить активировать, чтобы оставить активную текущую точку останова после достижения выбранной точки останова.

Похоже, вам нужно будет установить его в строке SomeClass.doSomething(), а затем в любое место в методе Utils.doSomething()

.
...