java - 他到底如何调试这样一个正在运行的应用程序,更重要的是,我该如何调试?

标签 java eclipse debugging remote-debugging

“调试!”

您可能会注意到,在第一个 15 seconds of this YouTube video (from 1:01:01 to 1:01:16) 内,Markus Persson(又名“Notch”,Minecraft 的创建者)以某种方式设法保存/更新应用程序并为其附加调试器当它已经在调试过程中时,据说所有这些都带有简单的键盘快捷键。以前编码的应用程序以某种方式神奇地变成了新编辑的应用程序,并且似乎没有重新启动它或生成一个新进程......这可能只是某种形式的本地远程调试,但有些事情似乎不太正确。

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

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

更新

好吧,这似乎是 Eclipse 特有的标准功能。
来自 NetBeans 和 Visual Studio 的背景,我很惊讶这在其他地方似乎不存在(或者至少在 NetBeans 中!)...

最佳答案

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

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

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

关于java - 他到底如何调试这样一个正在运行的应用程序,更重要的是,我该如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24008912/

相关文章:

java - 如何将 arrayList 转换为由连字符分隔的字符串

java - 声明某些对象时使用接口(interface)而不是类

java - 运行Eclipse并出现错误

asp.net - "Disable managed optimizations and restart debugging"在 Visual Studio 中实际更改了哪些设置?

java - Paypal 与 java 集成

android - 无法在 Eclipse 中调试 Android 应用程序空白线程

android - 向 LogCat 发送消息

java - 在 Eclipse 中启动多个进程

iOS如何以编程方式读取设备的屏幕自动锁定超时时间?

java - 在 Java 对象树上创建的 Clojure zipper 可以在 zip-filter 中工作吗?