Java 执行代码以了解它的任何方式';在eclipse调试器中运行什么?

Java 执行代码以了解它的任何方式';在eclipse调试器中运行什么?,java,eclipse,debugging,pax-exam,Java,Eclipse,Debugging,Pax Exam,我有一些帕克斯考试。为了正常执行测试,我只需在Eclipse中运行JUnit类。如果我想单步执行Eclipse调试器中的代码,我必须让它设置调试选项,包括让它等待调试器连接的标志,这是我必须运行的单独进程。我目前正在检查代码中的“debug”系统属性以启用此功能,但这有点烦人 如果@Configuration方法可以查看一个系统属性或一些其他条件(如果代码在调试器中执行,这些条件将始终为真),那将非常好,因此我可以将其用作触发器来启用这些标志,而不是手动设置“debug”系统属性 我已经尝试过在

我有一些帕克斯考试。为了正常执行测试,我只需在Eclipse中运行JUnit类。如果我想单步执行Eclipse调试器中的代码,我必须让它设置调试选项,包括让它等待调试器连接的标志,这是我必须运行的单独进程。我目前正在检查代码中的“debug”系统属性以启用此功能,但这有点烦人

如果@Configuration方法可以查看一个系统属性或一些其他条件(如果代码在调试器中执行,这些条件将始终为真),那将非常好,因此我可以将其用作触发器来启用这些标志,而不是手动设置“debug”系统属性

我已经尝试过在这个方法的顶部设置一个断点,并检查所有系统属性,以查找在调试器中可能设置的内容,但没有看到任何内容

更新:

为了清楚起见,我需要指出一些关于Pax考试测试如何工作的细节,以便更好地解释为什么我在寻找改进这个过程的方法。当测试运行时,它分叉一个Karaf容器来运行测试。为了在调试器中运行测试,必须强制容器中运行的代码设置“suspend=y”标志,该标志将等待调试器连接。如果不进行调试,您肯定不想这样做

在启动pax考试测试运行后,您必须运行另一个调试配置,以建立到karaf容器的远程连接。从技术上讲,单元测试本身的运行配置不需要是调试配置

因此,实现这一点的最简单方法是让启动容器的代码检查“debug”系统属性(或您想调用的任何属性),并在设置该属性时设置调试器端口和“suspend=y”标志。如果未设置属性,则不会执行此操作

因此,如果在没有调试的情况下运行测试,则必须确保未设置系统属性。如果正在调试,则必须确保已设置。每次需要来回修改运行配置时,都必须编辑运行配置,这是一件令人烦恼的事情

因此,我的意图是将单元测试运行配置作为调试配置启动(即使不需要),并让启动karaf容器的代码检测到它正在作为调试配置运行,并在这种情况下设置“suspend=y”标志


我的结论是代码本身无法检测到这一点,但我将在自己的回答中详细说明如何让调试器对我有所帮助。

如果您正在调试eclipse应用程序,您可以使用
平台.isDebug()
检查您的应用程序是否正在使用调试或运行lanuch配置

在您的情况下,即检查Junit测试运行,我不知道如何检测我们是否正在使用运行/调试启动配置。但我们坚信,一定有一种方法可以通过代码找到答案,就像您建议使用System类的代码一样


为什么不能在Junit调试启动配置中传递自己的参数/环境变量(在“参数”选项卡或“环境”选项卡中使用-D=并在测试代码中使用它来检测?

我将自我回答以解决我的原始问题,尽管它不是第一个答案试图解决的原始问题的答案。但是,这个答案对我没有帮助

我真正需要的是能够运行我的Pax考试测试,这样当我第一次运行单元测试时,即运行Pax考试测试的“服务器”部分时,如果我要使用调试器,它将知道向服务器提供正确的“-Xdebug”参数,如果我不使用调试器,则不会。我有检查“调试”的代码属性,并使用该属性设置正确的“-Xdebug”参数,但如果需要更改运行测试的方式(介于调试和不调试之间),我不想在运行配置中手动添加或删除该参数

因此,据我所知,我所能做的最好的事情是,当我在调试器中运行单元测试的“服务器”部分时(否则它实际上不必在调试器中,因为只有客户端需要它),这将导致设置我正在检查的系统属性,因此它将设置正确的标志

我不知道Eclipse中有什么特性允许我在启动任何调试会话时运行特定的预定义代码片段(我指的是“任何”,而不是“特定的”调试会话),但有一些特性很接近,尽管这有点像黑客

我所做的是在设置要启动的karaf配置的方法的顶部设置一个断点,并使用以下表达式将断点设置为有条件的:

(System.setProperty("debug", "true") != null) && false
这将设置我需要的系统属性,但不会停止,因为最终表达式将为false

从技术上讲,它甚至不需要在这个方法中,它只需要在karaf选项设置之前被击中

这是一个工作区设置,所以我不需要每次启动Eclipse时都重新添加它

更新


升级到Oxygen后,使用新的“跟踪点”功能()可以稍微简单一些。只需“切换跟踪点”并将表达式设置为“
System.setProperty(“debug”,“true”)

您可以添加“debug”吗属性作为调试运行配置的JVM参数?这正是我试图避免的事情。我希望能够正常运行测试,或在调试中运行它,而不必修改运行配置。如果是正常的,它只运行。如果是调试,它设置标志,从而使它等待服务器连接。我一直是在代码中我想检查的地方,我设置了一个骗局