我有一个简单的 COBOL程序(在 Visual Cobol for Eclipse项目中),它计算二进制间隙的最大大小并打印结果。现在我想创建一个单元测试,然后修改程序,以便将结果返回给测试框架。
在单独的目录中有一个单元测试项目。在 Eclipse 中,项目结构如下所示:
这是自动生成的单元测试的代码。
当我在 Eclipse 中运行它时,我首先收到一条 Windows 错误消息
启动应用程序时出错 (0xc0000142)。要退出应用程序,请按 OK。
此后测试被标记为“已跳过”:
每次运行后都会创建一个文件COBOL-3\New_Configuration.bin
,例如5872mfunit-state.dat
. 它包含以下错误消息:
文件COBOL-3\New_Configuration.bin\MFUT_TESTBINARYGAP-syserr.txt
为空。COBOL-3\New_Configuration.bin\MFUT_TESTBINARYGAP-sysout.txt
包含我的程序的输出(如预期的那样):
BIN-REP
00000100000000000000000000000000
CTR
06
CTR:
06
CTR:
05
CTR:
04
CTR:
03
CTR:
02
CTR:
01
MAX-GAP-SIZE:
00
文件COBOL-3\New_Configuration.bin\COBOL-TEST.mfu
包含
[global]
fixture-filename=COBOL-TEST
preferred-cwd=C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\New_Configuration.bin
preferred-runner=mfurun
preferred-64bit-runner=true
isolate=true
report=noprintfile
report=nomarkdown
ignore-return-code=false
exit-code=true
cleanup=false
[MFUT_TESTBINARYGAP]
source.filename=C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\TestBinaryGap.cbl
source.lineno=17
source.seqfilename=C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\TestBinaryGap.cbl
source.seqno=172
collection.info=COBOL-TEST
setup=true
文件COBOL-3\New_Configuration.bin\TestBinaryGap.obj.1.tlog
包含:
#"C:\PROGRA~2\Micro Focus\Visual COBOL\bin64\cobol.exe" C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\TestBinaryGap.cbl DELINT USEC:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\New_Configuration.bin\mfant1904268475359773097.dir ;
^C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\TestBinaryGap.cbl
!C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\mfunit_prototypes.cpy
?C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\mfunit_prototypes.cpy
!$COBCPY\mfunit_prototypes.cpy
+"C:\Program Files (x86)\Micro Focus\Visual COBOL\cpylib\mfunit_prototypes.cpy"
!C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\mfunit.cpy
?C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\mfunit.cpy
!$COBCPY\mfunit.cpy
+"C:\Program Files (x86)\Micro Focus\Visual COBOL\cpylib\mfunit.cpy"
-"C:\Program Files (x86)\Micro Focus\Visual COBOL\cpylib\mfunit.cpy"
-"C:\Program Files (x86)\Micro Focus\Visual COBOL\cpylib\mfunit_prototypes.cpy"
!C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\mfunit.cpy
?C:\usr\dp\dev\java-mainframe\01-BinaryGap\COBOL-3\mfunit.cpy
!$COBCPY\mfunit.cpy
+"C:\Program Files (x86)\Micro Focus\Visual COBOL\cpylib\mfunit.cpy"
我怎样才能解决这个问题?
目标是创建一个最小测试(可能通过或失败,但不会像现在那样崩溃),然后逐渐向它添加逻辑(它必须是循序渐进的,因为我对 COBOL 不是很有经验)。
更新 1:我将注册表项的值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows
从
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16
至
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,1024 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16
错误仍然存在。
更新 2:有关系统的信息。
更新 3:运行测试前的 VMMAP 输出:
出现错误信息后:
更新 4: JVM 版本似乎是 1.8。
更新 5:我更改了eclipse.ini
文件中的内存设置,使其看起来像这样:
-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-name
Visual COBOL
-feature
com.microfocus.eclipse.core.product
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
-Xms1024m
-Xmx2056m
-Dosgi.splashPath=platform:/base/plugins/com.microfocus.eclipse.core.win32
--add-modules=ALL-SYSTEM
--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
-XX:+IgnoreUnrecognizedVMOptions
-DDSTORE_REMOTE_CLASS_LOADING_ON=true
-Denable.analysis=true