Не можете ввести метод в режиме отладки в IntelliJ? - PullRequest
0 голосов
/ 26 мая 2018

В режиме отладки, как только я закончу отладку в одном методе и должен вернуться к вызывающей стороне, программа застревает, потому что входит в логику кода внешней библиотеки, то есть MethodProxy платформы Spring, как показано на скриншоте,и я не могу продолжать проникать в свой собственный код.«Застрял» означает, что он входит в код инфраструктуры Spring, то есть MethodProxy, а не мой собственный код, вызывающий мой метод.

Аналогично, если моя логика отладки пытается ввести другой метод, он входит в инфраструктуру Spring 'код, т.е. CglibAopProxy.Я не знаю, что вызвало это.Я мог отлаживать свой код в прошлом, но не знаю, почему и как это произошло.

Я занимаюсь разработкой в ​​Spring-boot и использую IntelliJ IDE.

Когда я пыталсядля отладки в методе это произошло:

enter image description here

И когда я попытался вернуться к вызывающей стороне, это произошло:

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы можете настроить пошаговые фильтры, чтобы отладчик не останавливался во время пошагового выполнения.

Например, вы можете добавить org.springframework.*:

stepping filters Есть IDEA-143338 и несколько связанных с этим проблем, чтобы иметь это для пружинных пакетов из коробки.

0 голосов
/ 26 мая 2018

Для весны абсолютно нормально создать прокси-объект для пользовательских бинов (например, для управляемых транзакций).Следовательно, абсолютно нормально иметь ситуацию, когда вы, кажется, вызываете метод вашего класса другому вашему классу, но между ними фактически будет выполняться какой-то другой код.

Если вы продолжите отладку с места, где вашМетод вызова кода, который вы сейчас отлаживаете, самый простой способ для меня - поставить точку останова в вашем методе вызова после строки вызова.

Пример:

У вас есть приложение:

package pkg;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

@SpringBootApplication
public class Main {

    public static void main(String... args) {
        SpringApplication.run(Main.class);
    }
}

@Component
class MyTask implements ApplicationRunner {
    private final MyRepository repository;

    public MyTask(MyRepository repository) {
        this.repository = repository;
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        repository.doIt();
        System.out.println("........");
    }
}

@Repository
class MyRepository {
    public void doIt() {
        System.out.println("...");
    }
}

И вам случается отлаживать метод MyRepository.doIt.

enter image description here

Если вы хотите перейти к методу вызывающего (но незнать, где он вызывался) проверять фреймы в окне отладки

enter image description here

Там вы можете найти стек вызовов и выбрать, где вам продолжить отладку вашего приложения.(Код библиотеки обычно выделяется желтым цветом)

Затем просто установите точку останова на следующую строку после вызова текущего метода и нажмите F9 (Программа возобновления)

enter image description here

При желании вы можете просто навести курсор на нужную строку и нажать «Выполнить до курсора» (Alt + F9 или Option + F9)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...