教程:远程调试
最后修改时间:2023 年 9 月 7 日在本教程中,我们将学习如何使用 IntelliJ IDEA 调试器附加到本地或远程进程。
创建一个项目
首先,让我们设置要调试的项目(一个输出大写字母 fromA
到 的简单程序Z
)。
提示
您可以使用自己的项目来代替本章中创建的项目。如果这样做,请确保:
该应用程序是使用调试信息进行编译的。这是默认的编译器设置,不得覆盖。否则,大多数调试器功能将不可用。
您有该应用程序的源代码。虽然可以使用反编译代码进行调试,但它更加复杂,本教程未介绍。
创建一个名为 的类
Alphabet
。在类的主体中
Alphabet
,粘贴该方法的以下定义main
:public static void main(String[] args) { System.out.println("Starting"); for (char c = 'A'; c < 'Z'; c++) { try { Thread.sleep(2500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(c); } System.out.println("Complete"); }
创建运行配置
为了允许调试器附加,我们需要使用特殊参数运行应用程序(稍后将详细介绍)。在本教程中,我们将设置一个运行/调试配置来为我们执行此操作。这样,我们将有两个运行/调试配置:一个用于运行应用程序,另一个用于附加到它。
提示
尽管我们在同一台计算机上运行和调试应用程序,但调试确实远程的应用程序的步骤是相同的。
设置调试器
首先,我们需要设置用于附加到主机应用程序的运行/调试配置。
转到“运行”| 编辑配置或按。AltShiftF1000
在“运行/调试配置”对话框中,单击“添加新配置”按钮并选择“远程 JVM 调试”。
配置/使用以下属性:
名称:配置如何调用此运行配置。该名称可以是任何名称,包括默认值。
Host:主机应用程序将运行的计算机的地址。由于我们在同一台计算机上运行它,因此它需要是localhost。如果程序在另一台机器上运行,我们将在此处指定其地址,例如:192.168.17.43。
远程 JVM 的命令行参数:主机应用程序需要启动的 VM 选项。我们将在其他运行/调试配置中使用它们。您可以立即复制它们或稍后返回此字段。
单击“应用”。
设置主机应用程序
对于主机应用程序需要如何运行没有任何限制。例如,您可以将应用程序打包为 JAR并使用以下命令行运行它:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 remote-debug.jar
笔记
出于调试目的,只要应用程序获得使用调试代理启动程序的 VM 选项,我们运行应用程序的方式就没有区别。
在本教程中,我们将使用运行/调试配置来为我们完成大部分工作。
右键单击类主体中的任意位置
Alphabet
。选择“更多运行/调试”,然后选择“修改运行配置”。单击“修改选项”,然后选择“添加 VM 选项”。在VM 选项字段中,粘贴从调试配置复制的选项。
单击“应用”。
运行应用程序
现在我们已经准备好了所有必要的东西,我们可以继续运行我们的应用程序。
按并选择。AltShiftF10
Alphabet
在程序输出中,第一行将是:
Listening for transport dt_socket at address: 5005
这表明我们已经启用了调试代理,并且我们的程序已准备好接受传入的调试器连接。
附加到进程
单击第 10 行处的装订线以在此处设置行断点。
按并选择您的远程调试配置。AltShiftF9
结果,程序在断点处暂停,您可以执行任何调试操作,例如单步执行、表达式求值等。
无论您的应用程序如何以及在何处启动,调试过程都是相同的。连接后,您可以使用相同的调试器功能,就像直接从 IntelliJ IDEA 启动应用程序一样。
关闭调试会话
关闭调试工具窗口中相应的会话选项卡。
选择是否要终止该进程或与其断开连接。
断开连接会停止调试会话,进程会继续运行。
终止会停止进程和调试会话。
感谢您的反馈意见!