如何跟踪基于javapackager的应用程序在macOS上启动时的作用?

时间:2017-11-27 06:38:51

标签: java debugging javapackager

我正在编写一个基于Java的应用程序,用于使用来自Java 8的Oracle javapackager创建的macOS。它可以在几个月内完美地工作,可能是由于最近的Java更新,现在当我重建应用程序时,结果在执行时没有任何消息退出。直接在终端shell(即java -jar path/to/my.jar)中运行jar文件本身可以正常工作而不会出错。我无法弄清楚.app版本出了什么问题,并且无法弄清楚如何从javapackager创建的内容中获取任何诊断信息。

如何跟踪.appjavapackager运行时创建的内容?

我正在使用来自Oracles Java 1.8 u152的-deploy -native image javapackager选项在OSX 10.12.6上创建应用程序。我的问题具体是关于如何让结果.app打印它正在做的事情,或者获得错误诊断,或某些事情,以帮助弄清楚它在幕后做了什么。运行javapackager本身并不需要帮助。

我认为使用Console将有助于理解正在发生的事情,但信息太稀疏且难以解释。隐藏了很多其他过程输出后,归结为以下内容:

default 22:43:22.523842 -0800   taskgated   MacOS error: -67062
default 22:43:22.733680 -0800   SBML Test Runner    WARNING: The Gestalt selector gestaltSystemVersion is returning 10.9.6 instead of 10.12.6. This is not a bug in Gestalt -- it is a documented limitation. Use NSProcessInfo's operatingSystemVersion property to get correct system version number.
Call location:
default 22:43:22.733853 -0800   SBML Test Runner    0   CarbonCore                          0x00007fff97a4d1b1 ___Gestalt_SystemVersion_block_invoke + 121
default 22:43:22.733876 -0800   SBML Test Runner    1   libdispatch.dylib                   0x00007fffac28b8fc _dispatch_client_callout + 8
default 22:43:22.733897 -0800   SBML Test Runner    2   libdispatch.dylib                   0x00007fffac28b8b9 dispatch_once_f + 38
default 22:43:22.733930 -0800   SBML Test Runner    3   CarbonCore                          0x00007fff979db292 _Gestalt_SystemVersion + 976
default 22:43:22.733982 -0800   SBML Test Runner    4   CarbonCore                          0x00007fff979daaad Gestalt + 139
default 22:43:22.734010 -0800   SBML Test Runner    5   libswt-pi-cocoa-4628.jnilib         0x00000001283072de Java_org_eclipse_swt_internal_cocoa_OS_Gestalt + 158
default 22:43:22.734028 -0800   SBML Test Runner    6   ???                                 0x00000001067919f4 0x0 + 4403567092

虽然最初的taskgated错误似乎很有用,但一些谷歌搜索表明这是一个常见的问题而不是致命的。

1 个答案:

答案 0 :(得分:0)

首先,我将通过终端调用打包的应用程序包中的二进制文件来验证实际的JVM:

/Applications/MyApp.app/Contents/MacOS/MyApp

如果出现JVM错误,您将输出打印到stdout。如果您可以确认JVM正常启动,则可以使用jvisualvm进行进一步分析。