skylot/jadx · error · CodegenException

Error generate insn:

Error message

Error generate insn: 

What it means

Thrown by InsnGen.makeInsn() as a CodegenException wrapping any exception that occurs during instruction rendering (makeInsnBody, assignVar, addCodeComments, etc.). It annotates the exception with the method and the specific instruction that failed, making it the primary diagnostic entry point for instruction-level codegen failures. This exception is then caught higher up by ClassGen.addMethod() which may log it as a method error or escalate it.

Source

Thrown at jadx-core/src/main/java/jadx/core/codegen/InsnGen.java:310

						code.add("// ");
					}
				}
				RegisterArg resArg = insn.getResult();
				if (resArg != null) {
					SSAVar var = resArg.getSVar();
					if (var == null || var.getUseCount() != 0 || insn.getType() != InsnType.CONSTRUCTOR) {
						assignVar(code, insn);
						code.add(" = ");
					}
				}
				makeInsnBody(code, insn, EMPTY_FLAGS);
				if (flag != Flags.INLINE) {
					code.add(';');
					CodeGenUtils.addCodeComments(code, mth, insn);
				}
			}
		} catch (Exception e) {
			throw new CodegenException(mth, "Error generate insn: " + insn, e);
		}
	}

	private void makeInsnBody(ICodeWriter code, InsnNode insn, Set<Flags> state) throws CodegenException {
		switch (insn.getType()) {
			case CONST_STR:
				String str = ((ConstStringNode) insn).getString();
				code.add(mth.root().getStringUtils().unescapeString(str));
				break;

			case CONST_CLASS:
				ArgType clsType = ((ConstClassNode) insn).getClsType();
				useType(code, clsType);
				code.add(".class");
				break;

			case CONST:
				LiteralArg arg = (LiteralArg) insn.getArg(0);

View on GitHub (pinned to e738a26571)

Solutions

  1. Check the cause exception of the CodegenException — it identifies the exact failure point.
  2. Report the instruction and method to jadx with the stack trace.
  3. Try fallback decompilation mode or skip the class.
Defensive patterns

Strategy: try-catch

Try / catch

// This is already caught by ClassGen.addMethod(); to handle it at a higher level:
try {
    insnGen.makeInsn(insn, code);
} catch (CodegenException e) {
    if (e.getMessage().startsWith("Error generate insn")) {
        mth.addError("Instruction generation failed: " + insn, e.getCause());
        code.startLine("// jadx: instruction generation failed: " + insn.getType());
        // Continue with next instruction instead of aborting the method
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Any uncaught exception while generating code for a single instruction — null pointer on an unattached arg, unsupported instruction variant, type resolution failure, etc. The wrapped cause provides the specific failure.

Common situations: Obfuscated or unusual bytecode patterns that exercise untested codegen paths. jadx version regressions in instruction processing. Nearly every instruction-level codegen failure funnels through here.

Related errors


AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14). Data as JSON: /api/errors/a7be505d44d8a9ad. Report an issue: GitHub.