Skip to content

Conversation

@graalvmbot
Copy link
Collaborator

In case a UserException has a cause attached, print its stack trace right after all messages to provide users with more diagnostic info.

An example where this is useful is a failing Feature. Currently, the output would look like this:

Error: Feature defined by org.springframework.aot.graalvm.ConstantFieldFeature unexpectedly failed with a(n) java.lang.NoSuchMethodError. Please report this problem to the authors of org.springframework.aot.graalvm.ConstantFieldFeature.
com.oracle.svm.driver.NativeImage$NativeImageError
	at org.graalvm.nativeimage.driver/com.oracle.svm.driver.NativeImage.showError(NativeImage.java:2298)
	at org.graalvm.nativeimage.driver/com.oracle.svm.driver.NativeImage.build(NativeImage.java:1886)
	at org.graalvm.nativeimage.driver/com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1845)

This PR makes the stack trace of the exception thrown in the feature available to the user:

Error: Feature defined by org.springframework.aot.graalvm.ConstantFieldFeature unexpectedly failed with a(n) java.lang.NoSuchMethodError. Please report this problem to the authors of org.springframework.aot.graalvm.ConstantFieldFeature.
Caused by: java.lang.NoSuchMethodError: 'org.graalvm.compiler.debug.DebugContext com.oracle.svm.hosted.FeatureImpl$DuringSetupAccessImpl.getDebugContext()'
        at org.springframework.aot.graalvm.ConstantFieldFeature.duringSetup(ConstantFieldFeature.java:41)
        at org.springframework.aot.graalvm.ConstantFieldFeature.duringSetup(ConstantFieldFeature.java:37)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$setupNativeImage$17(NativeImageGenerator.java:1042)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:93)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:1042)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:590)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:554)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:528)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:711)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.start(NativeImageGeneratorRunner.java:139)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:94)
Internal exception: com.oracle.svm.core.util.UserError$UserException: Feature defined by org.springframework.aot.graalvm.ConstantFieldFeature unexpectedly failed with a(n) java.lang.NoSuchMethodError. Please report this problem to the authors of org.springframework.aot.graalvm.ConstantFieldFeature.
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.UserError.abort(UserError.java:97)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.handleFeatureError(FeatureHandler.java:299)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:95)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:1042)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:590)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:554)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:528)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:711)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.start(NativeImageGeneratorRunner.java:139)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:94)
Caused by: java.lang.NoSuchMethodError: 'org.graalvm.compiler.debug.DebugContext com.oracle.svm.hosted.FeatureImpl$DuringSetupAccessImpl.getDebugContext()'
        at org.springframework.aot.graalvm.ConstantFieldFeature.duringSetup(ConstantFieldFeature.java:41)
        at org.springframework.aot.graalvm.ConstantFieldFeature.duringSetup(ConstantFieldFeature.java:37)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$setupNativeImage$17(NativeImageGenerator.java:1042)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:93)
        ... 7 more

(note, the internal exception is only visible because I ran this with -H:+ReportExceptionStackTraces).

In addition, the PR also makes sure errors and stack traces are printed consistently to stdout.

And report errors and traces to stdout to avoid interference between stdout/stderr, both of which are captured by the builder.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OCA Verified All contributors have signed the Oracle Contributor Agreement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants