EXCEPTION_ACCESS_VIOLATION 在 Jacob dll 中使用 Jenkins 管道中的 VM
EXCEPTION_ACCESS_VIOLATION in Jacob dll using VM in Jenkins pipeline
当在虚拟机中使用时,我们遇到了一个可能与 Jacob 1.14.3 dll 有关的问题。当从 windows 服务器 VM (master/slaves) 中的 jenkins 管道 运行ning 我们的自动化脚本时,日志中显示以下错误:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180012df1, pid=6404, tid=0x00000000000017bc
JRE version: Java(TM) SE Runtime Environment (8.0_271-b09) (build 1.8.0_271-b09)
Java VM: Java HotSpot(TM) 64-Bit Server VM (25.271-b09 mixed mode windows-amd64 compressed oops)
Problematic frame:
C [jacob-1.14.3-x64.dll+0x12df1]
Core dump written. Default location: c:\jenkins\workspace\PipelineCenarios\Test_Com_Claudio\hs_err_pid6404.mdmp
If you would like to submit a bug report, please visit:
http://bugreport.java.com/bugreport/crash.jsp
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.
[...]log too big to be posted in stack overflow[...]
VM Arguments:
jvm_args: -Dclassworlds.conf=C:\apache-maven-3.6.0\bin\..\bin\m2.conf -Dmaven.home=C:\apache-maven-3.6.0\bin\.. -Dmaven.multiModuleProjectDirectory=c:\jenkins\workspace\PipelineCenarios\Test_Com_Claudio\pos
java_command: org.codehaus.plexus.classworlds.launcher.Launcher clean test -Demulator.model=S920 -Dlogic.number=790001291 -Ddriver.app=S920POS.exe -Drunner.type= -Demulator.initialization=false -Dcucumber.filter.tag=@TesteComunicacaoMaster -Dextent.reporter.klov.start=false -Dklov.project.name=Tst_comunicacao -Dklov.report.name=S920 -Dextent.reporter.html.config=src/test/resources/extent-config.xml -Dextent.reporter.klov.config=src/test/resources/klov.properties -Dextent.reporter.html.out=target/test-output/HtmlReport/ExtentHtml.html -e -X
java_class_path (initial): C:\apache-maven-3.6.0\bin\..\boot\plexus-classworlds-2.5.2.jar
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_271
JRE_HOME=C:\Program Files\Java\jdk1.8.0_271\jre
PATH=C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\apache-maven-3.6.0\bin;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_271\bin;C:\Program Files\Java\jdk1.8.0_271\jre\bin;C:\Users\fafezzi\AppData\Local\Microsoft\WindowsApps;"C:\Program Files\Java\jre1.8.0_271\bin"
USERNAME=fafezzi
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 62 Stepping 4, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows 10.0 , 64 bit Build 14393 (10.0.14393.3630)
CPU:total 4 (initial active 4) (1 cores per cpu, 1 threads per core) family 6 model 62 stepping 4, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, clmul, erms, tsc, tscinvbit
Memory: 4k page, physical 8191408k(3782304k free), swap 9502128k(5723824k free)
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.271-b09) for windows-amd64 JRE (1.8.0_271-b09), built on Sep 16 2020 19:14:59 by "" with MS VC++ 15.9 (VS2017)
time: Wed Dec 2 15:26:51 2020
timezone: E. South America Standard Time
elapsed time: 14.765913 seconds (0d 0h 0m 14s)
Master VM 使用 Maven 构建项目并发送测试 运行 是从机。我们必须使用 Jacob dll 将 AutoITX 与 Junit 命令集成。
到目前为止,我们一直在检查不同的版本以及它们之间的集成:
- jacob dll(1.14.3 并审查了安装和权限)
- maven (3.3.9 / 3.6.0 / 3.5.3)
- surefire 插件(尝试使用 3.0.0-M4 和 2.22.0)
- JDK 和 JRE(尝试使用 1.8.0_271 和 1.11)
- AutoITX(已检查安装和权限)
在网络上找到一些关于此“异常访问违规”的结果后,我们还尝试更改 OS 语言。我们还要求虚拟化团队删除所有应用的强化策略,我们还 windows 更新 运行ned 并添加了 C redist 库,以尝试纠正我们面临的 DLL 问题。我们还隔离了我们所有的代码,以便只有一个文件只有一个命令(AutoIT 使用 jacob 自动执行任何操作的命令,甚至是鼠标移动),问题仍然存在。在我们的一次尝试中,我们 运行 一个本地 VM 有一个新的安装并且根本没有 jenkins,所以我们现在管道不是问题的原因
ALSO: 在团队本地机器上,脚本运行没有问题,程序被实例化,Maven之间的通信> Java> Surefire > Jacob > AutoITX > Windows 应用程序工作正常。我们无法确定为什么同样的构建和过程无法在我们的管道中运行 (VM/Jenkins)。
我们有记录表明这个管道以前工作过,但我们不知道它为什么停止工作。
有什么见解或建议吗?
可能的解决方案
尝试将您的 java 版本更改为 1.8。0_141。
注意 141 在这里很重要。不同的版本构建号可能不兼容并抛出类似的错误。
您可以在 Java Archive 中找到旧的 java 版本,然后搜索 Java SE Development Kit 8u141
上下文
我们的团队通过 java 代码调用 jacob dll 发现了完全相同的问题。
在我们的例子中,“hs_pid_xxxx”文件中的错误与上面的完全相同:
- Variant_getVariantType+0x51
- 内存地址180012df1
- EXCEPTION_ACCESS_VIOLATION
整个团队在网上搜索了几个月,同时交换 java 版本、jacob 版本、AutoitX 版本,甚至 windows 考虑到 windows server/windows 不同构建的版本家。
在我们尝试的过程中,我们意识到代码只是 运行 在我们本地公司的机器上,不可能 运行 在我们的任何 VM 甚至我们的虚拟机中调用这个特定的 jacob个人电脑。一段时间后,我们决定尝试使用安装在我们公司本地设置中的 SPECIFIC JAVA BUILD。通过特定构建,我的意思是不仅使用相同的 java 版本( Java 8/ Java 11/ Java 15 )而且还使用相同的 java 构建在 Java SE 开发套件 8u141
在此 link 中,我们下载了说明 141 的文件,异常消失了
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
显然,jvm 在较新的 java 版本
中引发了一个指向 jacob dll 的空指针
无论如何...如果有人遇到这个问题,我相信值得一试
当在虚拟机中使用时,我们遇到了一个可能与 Jacob 1.14.3 dll 有关的问题。当从 windows 服务器 VM (master/slaves) 中的 jenkins 管道 运行ning 我们的自动化脚本时,日志中显示以下错误:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180012df1, pid=6404, tid=0x00000000000017bc
JRE version: Java(TM) SE Runtime Environment (8.0_271-b09) (build 1.8.0_271-b09)
Java VM: Java HotSpot(TM) 64-Bit Server VM (25.271-b09 mixed mode windows-amd64 compressed oops)
Problematic frame:
C [jacob-1.14.3-x64.dll+0x12df1]
Core dump written. Default location: c:\jenkins\workspace\PipelineCenarios\Test_Com_Claudio\hs_err_pid6404.mdmp
If you would like to submit a bug report, please visit:
http://bugreport.java.com/bugreport/crash.jsp
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.
[...]log too big to be posted in stack overflow[...]
VM Arguments:
jvm_args: -Dclassworlds.conf=C:\apache-maven-3.6.0\bin\..\bin\m2.conf -Dmaven.home=C:\apache-maven-3.6.0\bin\.. -Dmaven.multiModuleProjectDirectory=c:\jenkins\workspace\PipelineCenarios\Test_Com_Claudio\pos
java_command: org.codehaus.plexus.classworlds.launcher.Launcher clean test -Demulator.model=S920 -Dlogic.number=790001291 -Ddriver.app=S920POS.exe -Drunner.type= -Demulator.initialization=false -Dcucumber.filter.tag=@TesteComunicacaoMaster -Dextent.reporter.klov.start=false -Dklov.project.name=Tst_comunicacao -Dklov.report.name=S920 -Dextent.reporter.html.config=src/test/resources/extent-config.xml -Dextent.reporter.klov.config=src/test/resources/klov.properties -Dextent.reporter.html.out=target/test-output/HtmlReport/ExtentHtml.html -e -X
java_class_path (initial): C:\apache-maven-3.6.0\bin\..\boot\plexus-classworlds-2.5.2.jar
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_271
JRE_HOME=C:\Program Files\Java\jdk1.8.0_271\jre
PATH=C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\apache-maven-3.6.0\bin;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_271\bin;C:\Program Files\Java\jdk1.8.0_271\jre\bin;C:\Users\fafezzi\AppData\Local\Microsoft\WindowsApps;"C:\Program Files\Java\jre1.8.0_271\bin"
USERNAME=fafezzi
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 62 Stepping 4, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows 10.0 , 64 bit Build 14393 (10.0.14393.3630)
CPU:total 4 (initial active 4) (1 cores per cpu, 1 threads per core) family 6 model 62 stepping 4, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, clmul, erms, tsc, tscinvbit
Memory: 4k page, physical 8191408k(3782304k free), swap 9502128k(5723824k free)
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.271-b09) for windows-amd64 JRE (1.8.0_271-b09), built on Sep 16 2020 19:14:59 by "" with MS VC++ 15.9 (VS2017)
time: Wed Dec 2 15:26:51 2020
timezone: E. South America Standard Time
elapsed time: 14.765913 seconds (0d 0h 0m 14s)
Master VM 使用 Maven 构建项目并发送测试 运行 是从机。我们必须使用 Jacob dll 将 AutoITX 与 Junit 命令集成。
到目前为止,我们一直在检查不同的版本以及它们之间的集成:
- jacob dll(1.14.3 并审查了安装和权限)
- maven (3.3.9 / 3.6.0 / 3.5.3)
- surefire 插件(尝试使用 3.0.0-M4 和 2.22.0)
- JDK 和 JRE(尝试使用 1.8.0_271 和 1.11)
- AutoITX(已检查安装和权限)
在网络上找到一些关于此“异常访问违规”的结果后,我们还尝试更改 OS 语言。我们还要求虚拟化团队删除所有应用的强化策略,我们还 windows 更新 运行ned 并添加了 C redist 库,以尝试纠正我们面临的 DLL 问题。我们还隔离了我们所有的代码,以便只有一个文件只有一个命令(AutoIT 使用 jacob 自动执行任何操作的命令,甚至是鼠标移动),问题仍然存在。在我们的一次尝试中,我们 运行 一个本地 VM 有一个新的安装并且根本没有 jenkins,所以我们现在管道不是问题的原因
ALSO: 在团队本地机器上,脚本运行没有问题,程序被实例化,Maven之间的通信> Java> Surefire > Jacob > AutoITX > Windows 应用程序工作正常。我们无法确定为什么同样的构建和过程无法在我们的管道中运行 (VM/Jenkins)。
我们有记录表明这个管道以前工作过,但我们不知道它为什么停止工作。
有什么见解或建议吗?
可能的解决方案
尝试将您的 java 版本更改为 1.8。0_141。
注意 141 在这里很重要。不同的版本构建号可能不兼容并抛出类似的错误。
您可以在 Java Archive 中找到旧的 java 版本,然后搜索 Java SE Development Kit 8u141
上下文
我们的团队通过 java 代码调用 jacob dll 发现了完全相同的问题。 在我们的例子中,“hs_pid_xxxx”文件中的错误与上面的完全相同:
- Variant_getVariantType+0x51
- 内存地址180012df1
- EXCEPTION_ACCESS_VIOLATION
整个团队在网上搜索了几个月,同时交换 java 版本、jacob 版本、AutoitX 版本,甚至 windows 考虑到 windows server/windows 不同构建的版本家。
在我们尝试的过程中,我们意识到代码只是 运行 在我们本地公司的机器上,不可能 运行 在我们的任何 VM 甚至我们的虚拟机中调用这个特定的 jacob个人电脑。一段时间后,我们决定尝试使用安装在我们公司本地设置中的 SPECIFIC JAVA BUILD。通过特定构建,我的意思是不仅使用相同的 java 版本( Java 8/ Java 11/ Java 15 )而且还使用相同的 java 构建在 Java SE 开发套件 8u141 在此 link 中,我们下载了说明 141 的文件,异常消失了 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 显然,jvm 在较新的 java 版本
中引发了一个指向 jacob dll 的空指针无论如何...如果有人遇到这个问题,我相信值得一试