我正在处理一个包含多个子模块的NetBeans项目。该应用程序在WildFly上运行。这两个模块对我来说都是新的,但我能够创建一个本地WildFly服务器来运行该应用程序。然后,我还可以通过进程ID或端口连接调试器。但这就是我的问题所在。任何设置断点的尝试都会导致"Not able to submit breakpoint LineBreakpoint SomeModuleClass.java : 123, reason: The breakpoint is set outside of any class."
我在NetBeans WildFly服务器上尝试过这种方法,独立于NetBeans启动WildFly,但仍然是在本地启动,并且是在托管的开发示例上--所有这些都没有成功。是的,它是在一个可执行行上设置的。但奇怪的是,另一个团队成员已经能够使用(据我所知)相同的设置来附加和设置断点。[更新:我发现我的同事在她的主机笔记本电脑上运行的是基于Windows的NB,而我在虚拟机中运行的是Ubuntu。我希望应用程序会有差异,但基本功能不会有差异。]
我尝试过打开子模块项目并通过它们设置断点,更改“主项目,”清理构建,重新加载,重新启动......什么都没有。我也搜索了SO和Google,但没有找到类似的问题。似乎它一定是在我的NetBeans配置中,因为我的同行在相同的代码或相同的外部服务器上没有看到这个问题。是否有一些构建设置正在丢失一些类路径信息?
有人知道这里发生了什么吗?
[NetBeans 13、开放式JDK 11、WildFly 21、Ubuntu 20.04]
[更新:]正如我所说的“任何设置断点的尝试...”,例如此类方法中的任何一行:
public class DateUtils {
public static long convertMillisecondsToHours(long millis) {
if (millis > 0) {
return TimeUnit.MILLISECONDS.toHours(millis);
} else {
return millis;
}
}
}
下面是我启动服务器和调试器的方法:
启动服务器:
启动调试器:
配置调试器(请注意断点已设置且已设置):
启动调试器并中断断点:
1条答案
按热度按时间8ftvxx2r1#
我终于能够解决这个问题了,虽然我不能完全确定我采取的许多步骤中哪一个是关键的。我在这里记录了这些要点,以备将来对某人有所帮助。
8080:已在使用中
按照@DavidConrad的建议,我创建了两个简化的项目。第一个只是一个简单的Java应用程序,调试工作正常。第二个是一个简单的Web应用程序,这就是我遇到麻烦的地方。IDE日志(查看/IDE日志)在这里是最有帮助的。一贯地,如果我试图直接调试项目(例如,右键单击project,Debug),它将成功启动WildFly,启动调试器,然后声称WildFly无法启动,因为8080已在使用中。因此,似乎NetBeans可以启动服务器,但随后看不到服务器已启动。
9990:服务器拒绝身份验证
我发现NetBeans无法打开9990端口(management-http)到WildFly,原因是
SaslException: DIGEST-MD5: Server rejected authentication
。最终,这似乎是由于/opt/wildfly/standalone/tmp/auth
上缺少权限造成的,/opt/wildfly/standalone/tmp/auth
似乎用于临时保存MD5哈希值。因此,我认为核心问题是NetBeans无法连接到WildFly的管理端口9990。这是由于我的安装存在权限问题。
还有一些额外的障碍。
一旦我能够设置一些断点,我也遇到了一个类似的问题,其中一个类的断点将失败与
source file does not belong into the preferred root source
。这是一个已知的缺陷(see here),由于类遮蔽。我还对JVM进行了一些尝试。我看到了一些错误,其中Java的基本元素是未知的。我使用的是Open JVM 11,它安装在
/usr/lib/jvm
中,但NetBeans似乎希望它直接安装在/usr
中。通过添加一个新的Java平台,这个问题很容易解决。然后确保NetBeans在缺省情况下使用新的项目,并且所有项目都指向新的项目。然后有一天,我失去了之前意识到配置脚本有DOS行结束。🙄