43

假设我有这样的 java 代码(仅作为示例):

public void someMethod(){
    int a = 3;
    int b = 2; // <-- stay debug here
    a = b + 2;
    System.out.prinln(a);
}

可以跳过行的执行a = b + 2;并立即转到System.out.prinln(a);

PS我使用Intellij Idea 12。

4

6 回答 6

45

调试器不可能不执行部分代码。

但是,可以执行额外的代码并更改变量的值,因此如果您需要在调试期间从执行中排除一行,则必须更改代码以准备这种调试。

public void someMethod() {
    int a = 3;
    int b = 2;
    boolean shouldRun = true;
    if (shouldRun) {
        a = b + 2;
    }
    System.out.prinln(a);
}

然后,您将设置一个断点,在不停止执行的情况下更改 shouldRun 的值。可以这样做。

在此处输入图像描述

注意

  1. 未检查暂停
  2. 日志评估表达式用于在命中断点时更改变量
于 2013-07-04T08:29:34.063 回答
6

仅当您使用热交换,或者换句话说,代码重新加载工具 - 在运行时添加代码更改/新代码时,才有可能跳过行。热插拔是在不关闭系统的情况下更换组件的功能。热交换也可以指改变程序运行代码而不需要中断其执行的能力。

有各种热交换工具,例如:JRebel ( https://zeroturnaround.com/software/jrebel/ ) 或 HotSwapAgent ( http://www.hotswapagent.org/ )

您避免必须重新构建整个应用程序以重新加载代码更改,这是一个巨大的时间节省。无需运行完整的构建过程,只需使用 IDE 中内置的编译器,hotSwap 代理/工具会将代码重新加载到 JVM 中。

在这种情况下,它实际上不会跳过,但您可以评论/更改行并重新加载它。这个工具太棒了!!!!它极大地加快了开发/调试过程。

于 2016-02-18T15:54:54.660 回答
5

IntelliJ 最近发布了一篇关于名为Jump to Line的插件的博客文章,尽管 IntelliJ 本身没有此功能。令人惊讶的是,当 Visual Studio 拥有这么多年时,IntelliJ 仍然没有此功能!

https://blog.jetbrains.com/idea/2020/08/jump-to-any-line-while-debugging/

于 2020-10-10T22:21:56.270 回答
3

调试时不能只跳过“行执行”。您可以按 F8 跳过。

于 2013-07-04T05:37:21.023 回答
0

如 ntotomanov 所述,您可以使用 HotSwap。但只是添加了我使用远程调试来调试基于 Docker 的应用程序,所以如果我想要这种功能,我只需注释掉代码,然后转到 Build -> Recompile class 或 Rebuild Project 。然后 Intellij 发出 Build & Attempting to HotSwap 代码!如果你做了一些小事,比如注释掉代码,它大多数时候总是成功的。愉快的调试。

于 2019-11-13T14:07:20.847 回答
-1

在 IntelliJ 甚至 Eclipse 中都不能跳过行的 EXECUTION。您唯一能做的就是您可以跳过 (F8) - 这将逐行跟踪,而无需进入任何函数。

另一件事是 Step out(Shift+F8) - 它将通过在该单个步骤的行之间执行直接进入下一个调试点。

于 2013-07-04T05:52:26.043 回答