{"record":{"id":"51a030ba94a6b98f","repo":"pinpoint-apm/pinpoint","slug":"unknown-instrumentengine-instrumentengine","errorCode":null,"errorMessage":"Unknown InstrumentEngine:${instrumentEngine}","messagePattern":"Unknown InstrumentEngine:(.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/InstrumentEngineProvider.java","lineNumber":82,"sourceCode":"    }\n\n    public InstrumentEngine get() {\n        final String instrumentEngine = instrumentConfig.getProfileInstrumentEngine().toUpperCase();\n        if (InstrumentConfig.INSTRUMENT_ENGINE_ASM.equals(instrumentEngine)) {\n            logger.info(\"ASM InstrumentEngine\");\n\n            // WARNING must be singleton\n            final InterceptorDefinitionFactory interceptorDefinitionFactory = new InterceptorDefinitionFactory();\n            // WARNING must be singleton\n            final ScopeFactory scopeFactory = new ScopeFactory();\n            EngineComponent engineComponent = new DefaultEngineComponent(objectBinderFactory, interceptorDefinitionFactory, apiMetaDataServiceProvider, scopeFactory, interceptorHolderIdGenerator);\n            DefineClass defineClass = DefineClassFactory.getDefineClass();\n            return new ASMEngine(instrumentation, engineComponent, defineClass);\n\n        } else {\n            logger.warn(\"Unknown InstrumentEngine:{}\", instrumentEngine);\n\n            throw new IllegalArgumentException(\"Unknown InstrumentEngine:\" + instrumentEngine);\n        }\n    }\n}\n","sourceCodeStart":64,"sourceCodeEnd":86,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/InstrumentEngineProvider.java#L64-L86","documentation":"InstrumentEngineProvider.get() selects the bytecode instrumentation engine; only ASM (and the legacy JAVASSIST branch earlier in the method) is recognized. Any other configured engine logs a warning and throws IllegalArgumentException('Unknown InstrumentEngine:<value>').","triggerScenarios":"The profiler.instrument.engine config value is neither 'ASM' nor 'JAVASSIST' (case-sensitively matched), reaching the else branch during agent module configuration.","commonSituations":"Typo such as 'asm' in lowercase when matching is case-sensitive, copying config from another agent (e.g. 'bytebuddy'), or experimenting with an engine this Pinpoint version does not ship.","solutions":["Set profiler.instrument.engine=ASM (or JAVASSIST if using the legacy engine)","Check exact spelling/case against the enum constant the config is parsed into","Upgrade the agent if you need an engine introduced in a newer Pinpoint release","Review the preceding WARN log line which echoes the invalid value"],"exampleFix":"// before\nprofiler.instrument.engine=ByteBuddy\n// after\nprofiler.instrument.engine=ASM","handlingStrategy":"validation","validationCode":"String engine = config.readString(\"profiler.instrument.engine\", \"ASM\");\nif (!engine.equals(\"ASM\") && !engine.equals(\"JAVASSIST\")) {\n    throw new IllegalArgumentException(\"profiler.instrument.engine must be ASM or JAVASSIST, got: \" + engine);\n}","typeGuard":null,"tryCatchPattern":"try { engineProvider.get(); } catch (IllegalArgumentException e) { logger.error(\"Fix profiler.instrument.engine; {} is unsupported\", engineValue); }","preventionTips":["Use exact case: ASM or JAVASSIST","Check release notes before using a new engine value","Validate config after copying settings between agents"],"tags":["config","enum","bytecode","instrumentation"],"backgroundTag":"invalid-enum-value","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"}