Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';是否在IntelliJ中以调试模式输入方法?_Java_Spring_Multithreading_Intellij Idea - Fatal编程技术网

Java Can';是否在IntelliJ中以调试模式输入方法?

Java Can';是否在IntelliJ中以调试模式输入方法?,java,spring,multithreading,intellij-idea,Java,Spring,Multithreading,Intellij Idea,在调试模式下,一旦我用一个方法完成调试,并且需要返回调用方,程序就会被卡住,因为它进入了外部库代码的逻辑,如屏幕截图所示,即spring framework的MethodProxy,我无法继续进入我自己的代码。”“卡住”意味着它进入spring框架的代码,即MethodProxy,而不是我自己的代码,我的方法的调用者 同样,如果我的调试逻辑尝试输入另一个方法,它将输入spring框架的代码,即CglibAopProxy。我不知道这是什么原因造成的。我过去能够调试我的代码,但不知道为什么会发生这种

在调试模式下,一旦我用一个方法完成调试,并且需要返回调用方,程序就会被卡住,因为它进入了外部库代码的逻辑,如屏幕截图所示,即spring framework的MethodProxy,我无法继续进入我自己的代码。”“卡住”意味着它进入spring框架的代码,即MethodProxy,而不是我自己的代码,我的方法的调用者

同样,如果我的调试逻辑尝试输入另一个方法,它将输入spring框架的代码,即CglibAopProxy。我不知道这是什么原因造成的。我过去能够调试我的代码,但不知道为什么会发生这种情况

我正在Spring boot中开发并使用IntelliJ IDE

当我尝试调试到一个方法时,发生了以下情况:

当我试图回到打电话的人身边时,发生了这样的事情:


对于spring,为用户的bean(例如托管事务)创建代理对象是绝对正常的。因此,出现这样的情况是绝对正常的,即您的类似乎在从类方法调用另一个类,但在这两者之间实际上将执行其他代码

如果您想从代码调用方法的地方继续调试,那么您现在正在调试的最简单的方法就是将断点放在调用行之后的调用方方法中

例如:

您有一个应用程序:

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
方法

若要转到调用方方法(但不知道调用它的位置),请在调试窗口中检查帧

在那里,您可以找到调用堆栈,并从中选择继续调试应用程序的位置。(库代码通常以黄色突出显示)

然后只需在当前方法调用后将断点放在下一行,然后按F9键(恢复程序)


(可选)您可以将光标放在所需的行上,然后按“运行到光标”(Alt+F9或Option+F9)

您可以设置单步筛选,以便调试器在单步执行时不会停止

例如,您可以添加
org.springframework.*


对于spring软件包来说,有很多问题需要解决。

什么是程序卡住?您正在设置新的断点,但它并没有停止?@ArtemPetrov,请查看我的更新。事实证明,它与多线程无关。