【问题标题】:Can eclipse debug or run two program in a project可以eclipse调试或者在一个项目中运行两个程序
【发布时间】:2013-09-04 08:40:00
【问题描述】:

eclipse debug 可以在一个项目中运行两个程序吗?我的意思是我有两个带有public static void main() 方法的程序。可以同时调试它们吗?我已经尝试过这样做。有两个显示控制台。调试窗口中有两个线程。您可以单击线程来决定要调试的程序。但是以这种方式运行或调试程序的结果似乎与单独运行或调试它们不同?有没有人有类似经历的?

【问题讨论】:

    标签: java eclipse debugging


    【解决方案1】:

    是的,您可以在 eclipse 中同时运行和调试两个或多个 java 程序,而不会相互影响。事实上,您可以一次多次运行和调试同一个主方法而不会出现问题。这样做的原因是每次单击运行或调试时,都会创建一个新的 jvm 实例,并加载当前的一组类文件。需要注意的是,如果两个程序都依赖于某些共享资源,它们可以间接地相互影响。如果没有看到您的代码,很难确定为什么当您同时运行多个程序时会得到不同的结果。

    【讨论】:

    • 我正在尝试动态修改已加载到 jvm 中的类。首先,运行目标程序,它会启动一个 jvm(例如 jvm1)。然后运行另一个程序将代理附加到 jvm1 以修改 jvm1 中加载的类,并启动 jvm2。无论如何,如果我在一个项目中在 Eclipse 中运行这两个程序,我得到 retransformClasses() 运行两次并在第二次调用它时出错(class redefinition failed)。但是,如果我在 windows 命令窗口中运行目标程序,而在 eclipse 中运行另一个。我一无所获。应该没有区别。他们使用相同的 jre。
    • 位在我的区域之外,但在调试模式下运行时,eclipse 将使用 -agentlib 标志附加它自己的调试代理。如果您从命令行运行程序,它显然不会这样做。这可能是您的问题的原因?如果您想查看 eclipse 用来运行程序的确切 java 命令,请在 windows 中使用进程资源管理器或在 linux 中使用类似的东西。然后您可以将其与在命令行中运行它的方式进行比较。
    • 你的意思是eclipse默认附加一个代理,即使我没有手动添加任何调试参数?
    • 如果你使用调试模式,eclipse发出的javaw.exe命令会是这样的:"C:\Program Files\Java\jre7\bin\javaw.exe" -agentlib:jdwp=transport =dt_socket,suspend=y,address=localhost:61428 -Dfile.encoding=Cp1252 -classpath ...等等。我假设eclipse然后将它的调试器附加到该地址。
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2015-05-12
    • 1970-01-01
    • 2010-10-14
    • 2013-05-27
    • 2018-08-14
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多