Skip to content

Commit 2879473

Browse files
jbachorikclaude
andcommitted
Disable ThrowableInstrumentation during native-image builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c5fe600 commit 2879473

3 files changed

Lines changed: 4 additions & 38 deletions

File tree

dd-java-agent/instrumentation/datadog/profiling/exception-profiling/src/main/java/datadog/exceptions/instrumentation/ThrowableInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public ThrowableInstrumentation() {
1818

1919
@Override
2020
public boolean isEnabled() {
21-
return Platform.hasJfr() && super.isEnabled();
21+
return Platform.hasJfr() && !Platform.isNativeImageBuilder() && super.isEnabled();
2222
}
2323

2424
@Override

dd-java-agent/instrumentation/graal/graal-native-image-20.0/src/main/java/datadog/trace/instrumentation/graal/nativeimage/AnnotationSubstitutionProcessorInstrumentation.java

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -34,42 +34,9 @@ public static class FindTargetClassesAdvice {
3434
public static void onExit(@Advice.Return(readOnly = false) List<Class<?>> result) {
3535
result.add(Target_com_datadog_profiling_agent_ProcessContext.class);
3636
result.add(Target_datadog_jctools_util_UnsafeRefArrayAccess.class);
37-
38-
// Only register JMXFetch substitutions if JMXFetch is actually present on the classpath.
39-
// Load reflectively to prevent GraalVM's annotation processor from discovering the
40-
// @TargetClass annotations when JMXFetch is absent (e.g. native-image smoke tests).
41-
if (isJmxFetchPresent()) {
42-
try {
43-
ClassLoader cl = FindTargetClassesAdvice.class.getClassLoader();
44-
result.add(
45-
Class.forName(
46-
"datadog.trace.instrumentation.graal.nativeimage.Target_org_datadog_jmxfetch_App",
47-
false,
48-
cl));
49-
result.add(
50-
Class.forName(
51-
"datadog.trace.instrumentation.graal.nativeimage.Target_org_datadog_jmxfetch_Status",
52-
false,
53-
cl));
54-
result.add(
55-
Class.forName(
56-
"datadog.trace.instrumentation.graal.nativeimage.Target_org_datadog_jmxfetch_reporter_JsonReporter",
57-
false,
58-
cl));
59-
} catch (ClassNotFoundException e) {
60-
// Substitution classes not available, skip them
61-
}
62-
}
63-
}
64-
65-
private static boolean isJmxFetchPresent() {
66-
try {
67-
Class.forName(
68-
"org.datadog.jmxfetch.App", false, FindTargetClassesAdvice.class.getClassLoader());
69-
return true;
70-
} catch (ClassNotFoundException e) {
71-
return false;
72-
}
37+
result.add(Target_org_datadog_jmxfetch_App.class);
38+
result.add(Target_org_datadog_jmxfetch_Status.class);
39+
result.add(Target_org_datadog_jmxfetch_reporter_JsonReporter.class);
7340
}
7441
}
7542
}

dd-java-agent/instrumentation/graal/graal-native-image-20.0/src/main/java/datadog/trace/instrumentation/graal/nativeimage/GraalNativeImageModule.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ public String[] muzzleIgnoredClassNames() {
2727
return new String[] {
2828
"jdk.vm.ci.meta.ResolvedJavaType",
2929
"jdk.vm.ci.meta.ResolvedJavaField",
30-
packageName + ".AnnotationSubstitutionProcessorInstrumentation$FindTargetClassesAdvice",
3130
// ignore helper class names as usual
3231
packageName + ".Target_com_datadog_profiling_agent_ProcessContext",
3332
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess",

0 commit comments

Comments
 (0)