{"record":{"id":"bf9e359e39b1c4ab","repo":"pinpoint-apm/pinpoint","slug":"not-found-caused-by-bf9e35","errorCode":null,"errorMessage":" not found Caused by:","messagePattern":" not found Caused by:","errorType":"exception","errorClass":"InstrumentException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMMethod.java","lineNumber":104,"sourceCode":"        return this.methodNode.getAccess();\n    }\n\n    @Override\n    public boolean isConstructor() {\n        return this.methodNode.isConstructor();\n    }\n\n    @Override\n    public MethodDescriptor getDescriptor() {\n        return this.descriptor;\n    }\n\n    public Class<? extends Interceptor> loadInterceptorClass(String interceptorClassName) throws InstrumentException {\n        try {\n            ClassLoader classLoader = this.declaringClass.getClassLoader();\n            return pluginContext.injectClass(classLoader, interceptorClassName);\n        } catch (Exception ex) {\n            throw new InstrumentException(interceptorClassName + \" not found Caused by:\" + ex.getMessage(), ex);\n        }\n    }\n\n    @Override\n    public int addInterceptor(Class<? extends Interceptor> interceptorClass) throws InstrumentException {\n        Objects.requireNonNull(interceptorClass, \"interceptorClass\");\n\n        final ASMInterceptorHolder interceptorHolder = newInterceptor(interceptorClass, null, null, null);\n        addInterceptor0(interceptorClass, interceptorHolder);\n        return interceptorHolder.getInterceptorId();\n    }\n\n    @Override\n    public int addInterceptor(Class<? extends Interceptor> interceptorClass, Object[] constructorArgs) throws InstrumentException {\n        Objects.requireNonNull(interceptorClass, \"interceptorClass\");\n        Objects.requireNonNull(constructorArgs, \"constructorArgs\");\n\n        final ASMInterceptorHolder interceptorHolder = newInterceptor(interceptorClass, constructorArgs, null, null);","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMMethod.java#L86-L122","documentation":"InstrumentException wrapping a failure to load a plugin interceptor class in ASMMethod.loadInterceptorClass. The original exception (usually ClassNotFoundException or LinkageError) is swallowed and its message appended after 'not found Caused by:'. It means the interceptor class named by the plugin could not be injected into the instrumented class's class loader.","triggerScenarios":"Calling loadInterceptorClass (via addInterceptor(String)) with a class name that is not on the target application's classpath; plugin jar missing from agent classpath; wrong interceptor class name string in plugin metadata.","commonSituations":"Renamed interceptor classes after plugin upgrade; the plugin jar not deployed to the agent's plugin directory; class loader isolation issues when the target class loader cannot see profiler/plugin classes.","solutions":["Verify the interceptor class name string matches the fully qualified class name in the plugin jar","Ensure the plugin jar containing the interceptor is in the agent's plugin directory","Check the wrapped 'Caused by' text for the real reason (ClassNotFound vs LinkageError/NoClassDefFound)","If the interceptor is meant for the bootstrap class loader, verify it is registered for bootstrap injection"],"exampleFix":"// before\naddInterceptor(\"com.plugin.OldInterceptor\");\n// after\naddInterceptor(\"com.plugin.RenamedInterceptor\"); // matches class in plugin jar","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    Class<? extends Interceptor> c = method.loadInterceptorClass(name);\n} catch (InstrumentException e) {\n    logger.error(\"interceptor {} not loadable in target classloader: {}\", name, e.getMessage(), e);\n}","preventionTips":["Reference interceptor classes by constant, not hand-typed strings","Deploy the plugin jar to the agent's plugin directory and confirm on startup","Check the 'Caused by' suffix to distinguish NotFound from linkage problems","Test plugins against the same JDK/target app loader used in production"],"tags":["classloader","class-not-found","instrumentation","plugin"],"backgroundTag":"class-not-found","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}