pinpoint-apm/pinpoint · error · NotFoundInstrumentException

is not found in

Error message

${methodName}${desc} is not found in ${superClassInternalName}

What it means

Thrown by ASMClass.addDelegatorMethod: the superclass loaded successfully but does not declare the method (name + descriptor) the delegator is supposed to forward to, so there is nothing to delegate and instrumentation fails.

Solutions

  1. Verify the method name and parameter types match a method actually declared in the superclass (not just a subtype)
  2. Correct the plugin's delegator method specification
  3. Instrument the class that truly declares the method instead
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:255 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/7b5e4d205d5a9115. Report an issue: GitHub.

Appendix: source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:255

    @Override
    public InstrumentMethod addDelegatorMethod(final String methodName, final String... paramTypes) throws InstrumentException {
        Objects.requireNonNull(methodName, "methodName");

        // check duplicated method.
        if (getDeclaredMethod(methodName, paramTypes) != null) {
            throw new InstrumentException(getName() + " already have method(" + methodName + ").");
        }

        final ASMClassNodeAdapter superClassNode = ASMClassNodeAdapter.get(this.pluginContext, classNode.getClassLoader(), classNode.getProtectionDomain(), this.classNode.getSuperClassInternalName());
        if (superClassNode == null) {
            throw new NotFoundInstrumentException(getName() + " not found super class(" + this.classNode.getSuperClassInternalName() + ")");
        }

        final String desc = JavaAssistUtils.javaTypeToJvmSignature(paramTypes);
        final ASMMethodNodeAdapter superMethodNode = superClassNode.getDeclaredMethod(methodName, desc);
        if (superMethodNode == null) {
            throw new NotFoundInstrumentException(methodName + desc + " is not found in " + superClassNode.getInternalName());
        }

        final ASMMethodNodeAdapter methodNode = this.classNode.addDelegatorMethod(superMethodNode);
        setModified(true);
        return new ASMMethod(this.engineComponent, this.pluginContext, this, methodNode);
    }

    @Override
    public void addField(Class<?> accessorClass) throws InstrumentException {
        Objects.requireNonNull(accessorClass, "accessorClass");
        try {

            final AccessorAnalyzer.AccessorDetails accessorDetails = AccessorAnalyzer.instance().analyze(accessorClass);

            final Type type = accessorDetails.getFieldType();
            final String accessorTypeName = accessorClass.getName();
            final String fieldName = FIELD_PREFIX + JavaAssistUtils.javaClassNameToVariableName(accessorTypeName);
            // skip members already declared in this class. e.g. a CGLIB proxy copies the injected members of an instrumented class

View on GitHub (pinned to 744c3d3075)