Java 他究竟如何调试这样一个正在运行的应用程序,更重要的是,我如何调试? “调试异常!”

Java 他究竟如何调试这样一个正在运行的应用程序,更重要的是,我如何调试? “调试异常!”,java,eclipse,debugging,remote-debugging,Java,Eclipse,Debugging,Remote Debugging,您可能会注意到,在第一个例子中,Markus Persson(也称为“Notch”,Minecraft的创建者)设法保存/更新了一个应用程序,并在其已处于调试过程中时将调试器附加到该应用程序上,据说所有这些都是通过一个简单的键盘快捷键实现的。以前编码的应用程序以某种方式神奇地变成了新编辑的应用程序,并且似乎没有重新启动它或产生新的进程。。。这可能只是某种形式的本地远程调试,但它的某些方面似乎并不完全正确 我花了几天时间在谷歌上搜索,四处询问他是如何做到这一点的,但都没有用。我在Eclipse首选

您可能会注意到,在第一个例子中,Markus Persson(也称为“Notch”,Minecraft的创建者)设法保存/更新了一个应用程序,并在其已处于调试过程中时将调试器附加到该应用程序上,据说所有这些都是通过一个简单的键盘快捷键实现的。以前编码的应用程序以某种方式神奇地变成了新编辑的应用程序,并且似乎没有重新启动它或产生新的进程。。。这可能只是某种形式的本地远程调试,但它的某些方面似乎并不完全正确

我花了几天时间在谷歌上搜索,四处询问他是如何做到这一点的,但都没有用。我在Eclipse首选项下没有发现这样的选项,每当我尝试保存和调试一个已经运行的应用程序时,它只会启动一个新更新的应用程序的单独实例,与旧的、过时的应用程序并排运行

我错过什么了吗?这是怎么可能的?
他是如何利用如此惊人、强大的调试功能的?
提前谢谢

更新 好的,这似乎是Eclipse特有的标准功能。

来自NetBeans和Visual Studio的背景,我很惊讶在其他地方(或者至少在NetBeans!)似乎不存在这一点。

这是Eclipse的内置功能。如果在程序以调试模式运行时编辑方法,它将编译新方法,并用新版本替换旧方法。如果某个线程已经在运行该方法,它将跳回开始(AFAIK;这可能只在程序暂停时发生)

您不需要重新启动程序或设置任何特殊首选项。只需编辑和保存,奇迹就会发生


Eclipse不能总是弄清楚如何将您的更改合并到正在运行的程序中——通常是在您更改了方法体之外的任何内容(包括方法的参数或返回类型)时。在这种情况下,您将看到一个警告对话框,可以选择停止程序、重新启动程序或忽略更改。

这是Eclipse的内置功能。如果在程序以调试模式运行时编辑方法,它将编译新方法,并用新版本替换旧方法。如果某个线程已经在运行该方法,它将跳回开始(AFAIK;这可能只在程序暂停时发生)

您不需要重新启动程序或设置任何特殊首选项。只需编辑和保存,奇迹就会发生


Eclipse不能总是弄清楚如何将您的更改合并到正在运行的程序中——通常是在您更改了方法体之外的任何内容(包括方法的参数或返回类型)时。在这种情况下,您将看到一个警告对话框,可以选择停止程序、重新启动程序或忽略更改。

对于Eclipse,只需更改源代码中的某些内容并在以调试模式启动后保存即可。这是Netbeans多年来的一项功能—它位于调试菜单“应用代码更改”中。对于Eclipse来说,只需更改源代码中的某些内容并在以调试模式启动后保存即可。这是Netbeans多年来的一项功能-它位于调试菜单“应用代码更改”中。奇怪的是,我已经尝试过这样做,但在运行的应用程序中没有任何更改。。。但我刚才在另一个项目上又试了一次,成功了!谢谢如果您进行了无法热交换的更改,Debug视图将显示某种警告。这取决于您所做的更改,以及代码暂停/运行的时间-并非所有更改都兼容。奇怪的是,我已经尝试过这样做,但它没有改变正在运行的应用程序中的任何内容。。。但我刚才在另一个项目上又试了一次,成功了!谢谢如果您进行了无法热交换的更改,Debug视图将显示某种警告。这取决于您所做的更改,以及代码暂停/运行的位置—并非所有更改都兼容。