当前位置: 首页 > 知识库问答 >
问题:

使用Eclipse CDT无头构建的Java死锁

祝嘉懿
2023-03-14

我的案例与此类似:Eclipse CDT无头构建在构建完成后挂起,但我对其进行了一点点挖掘,并发现了其他问题。

场景:我有一个C++应用程序和一个Linux上的Jenkins build服务器(Debian Jessie 8.2)。我的开发环境中有Eclipse CDT,它完美地构建了我的C++应用程序(本地构建)。我在构建服务器上安装了Eclipse CDT,我的Jenkins脚本运行了一个headlessbuild来构建我的应用程序。

问题:Jenkins甚至在建造完成后还会被吊死。但那不是詹金斯的错。我将Jenkins从方程中移除,并在构建服务器中执行Eclipse headlessbuild,结果是相同的,它在打印出“build Finished”后挂起。值得注意的是,如果我在构建服务器中打开Eclipse CDT并使用UI触发构建,我就可以成功地构建我的应用程序。

java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)

命令:下面是我使用的无头构建的Eclipse CDT命令:

~/eclipse/eclipse -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -import ~/myAppProj/ -build myAppProj/Release -data ~/workspace/

观察:

>

  • 当Java挂起时,我可以杀死它的进程并使可执行文件准备好使用。当我从Jenkins触发构建并关闭死锁的Java进程时,Jenkins只是继续正常运行更多脚本。

    Attaching to process ID 25262, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 24.111-b01
    Deadlock Detection:
    
    java.lang.RuntimeException: Unable to deduce type of thread from address 0x00007fc5c8032800 (expected type JavaThread, CompilerThread, ServiceThread, JvmtiAgentThread, or SurrogateLockerThread)
    

    那么,有人遇到过这样的问题吗?

  • 共有1个答案

    公孙俊弼
    2023-03-14

    (如评论中所证实)

    您面临的问题可能是CDT索引器中的锁定。有时,当Eclipse的生命周期很短时,CDT索引器会不幸地锁定。在命令行,您可以使用-no-indexer命令行选项(在Eclipse Mars中添加)禁用它。

    锁定本身被归档为错误,请参阅bug 327126-在资源增量通知期间尝试取消PDOMIndexerJob的死锁

     类似资料:
    • 我正在尝试使用Maven的默认设置与Maven-3.0.4构建Java Mail1.4.5。 如果我们可以使用nexus存储库,那么请让我知道如何设置。 谢谢Neelam Sharma

    • 问题内容: 我正在尝试使用Gradle命令行界面构建我的Android应用。我还将 GRADLE_HOME / bin 添加到环境中。首先,我使用gradle init生成了包装,gradlew在我的项目文件夹中。现在,当我使用此包装程序构建我的应用程序( ./gradlew build )或使用其任何功能时,它尝试下载gradle-2.3.zip文件并失败(以下错误消息)。我不明白的是为什么gr

    • 首先,我安装并配置了Bazel,现在我可以使用该教程成功地编译和部署应用程序。 然而,我被Android Studio困住了。我安装了官方的Bazel插件,然后尝试将我的Bazel项目导入到Android studio(从构建文件导入)。我得到了同步错误: 在项目目录下找到2个目标;同步其中的2个。从项目视图目录同步目标: //src/main/java/com/example/bazel:gre

    • 使用PhoneGap构建程序构建iOS和Android(无MAC) 有两种方法将Cordova/PhoneGap合并到你的应用中,你可以通过命令行来使用本地安装版,或者使用PhoneGap Build云服务。 选择很简单: 如果你有一台Mac:在本地使用Cordova 如果你不是构建iOS应用:在本地使用Cordova 如果你没有Mac但是想要创建iOS应用:使用PhoneGap Build Ph

    • 问题内容: 我想知道如何“杀死”已启动的过程。我知道Process API,但是不确定,是否可以使用它来杀死已经运行的进程,例如firefox.exe等。如果可以使用Process API,可以请您指向正确的方向?如果没有,还有哪些其他可用选项?谢谢。 问题答案: 如果你从Java应用程序中以从头开始处理(例如,通过调用或),那么你将对其具有有效的引用,并且可以在Process类中调用该方法以终止

    • 问题内容: 您更喜欢哪种机制来构建GUI:从头开始还是使用GUI生成软件? 问题答案: 我实际上很喜欢使用NetBeans GUI Builder构建GUI。事实是,它是相当可定制的- 它允许您更改用于自动生成的代码和自动生成的代码(无双关语)(这对于自定义组件是必需的),它还允许“简单”的事件处理和约束力。NetBeans GUI Builder不限于GroupLayout,而是允许您选择要使用