{"record":{"id":"6e4d101d60ace6fe","repo":"pxb1988/dex2jar","slug":"fail-exe","errorCode":null,"errorMessage":"fail exe ","messagePattern":"fail exe ","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"dex-ir/src/main/java/com/googlecode/dex2jar/ir/ts/an/BaseAnalyze.java","lineNumber":92,"sourceCode":"        tmpFrame = newFrame(localSize);\r\n        Cfg.dfs(method.stmts, this);\r\n        tmpFrame = null;\r\n    }\r\n\r\n    protected void analyzeValue() {\r\n    }\r\n\r\n    protected void afterExec(T[] frame, Stmt stmt) {\r\n\r\n    }\r\n\r\n    @Override\r\n    public T[] exec(T[] frame, Stmt stmt) {\r\n        this.currentFrame = frame;\r\n        try {\r\n            Cfg.travel(stmt, this, false);\r\n        } catch (Exception ex) {\r\n            throw new RuntimeException(\"fail exe \" + stmt, ex);\r\n        }\r\n        frame = this.currentFrame;\r\n        this.currentFrame = null;\r\n        afterExec(frame, stmt);\r\n        return frame;\r\n    }\r\n\r\n    protected T getFromFrame(int idx) {\r\n        return (T) currentFrame[idx];\r\n    }\r\n\r\n    protected T[] getFrame(Stmt stmt) {\r\n        return (T[]) stmt.frame;\r\n    }\r\n\r\n    protected void setFrame(Stmt stmt, T[] frame) {\r\n        stmt.frame = frame;\r\n    }\r","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/pxb1988/dex2jar/blob/b5bda4fb4935ae8b3869b422454ae3b3896c7bc1/dex-ir/src/main/java/com/googlecode/dex2jar/ir/ts/an/BaseAnalyze.java#L74-L110","documentation":"BaseAnalyze.exec runs the analyzer over a single IR statement inside a frame. Any exception thrown while Cfg.travel processes the statement is wrapped in a RuntimeException with the message 'fail exe ' plus the statement's toString. It is a wrapper that preserves the original cause, used to point at the exact offending IR statement.","triggerScenarios":"Any analyzer extending BaseAnalyze whose statement handler throws during Cfg.travel — e.g. null operand values, unexpected statement types, or broken IR invariants in the method being analyzed.","commonSituations":"Translating malformed or obfuscated DEX that produces inconsistent IR; running analysis passes on an IrMethod already mutated incorrectly by an earlier transformer.","solutions":["Read the wrapped cause (getCause()) and the printed stmt to find the failing statement","Verify the IR is well-formed (Cfg.reIndexNbr/trim) before running the analyzer","Narrow which earlier transformer produced the bad statement and fix or skip it","Catch RuntimeException around analyzer exec in batch translation to skip bad methods"],"exampleFix":"// before\nanalyze.exec(frame, stmt);\n// after\ntry {\n    analyze.exec(frame, stmt);\n} catch (RuntimeException e) {\n    LOG.warn(\"failed on stmt: \" + stmt, e.getCause());\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    analyzer.exec(frame, stmt);\n} catch (RuntimeException e) {\n    Throwable cause = e.getCause();\n    LOG.error(\"analysis failed at stmt \" + stmt + \": \" + cause, cause);\n}","preventionTips":["Always inspect getCause() — the message alone ('fail exe') is just a wrapper","Validate IR (Cfg.reIndexNbr, ensure no null operands) before running analyzers","Log stmt.toString() to locate the offending statement in the IrMethod"],"tags":["ir-analysis","statement-execution","wrapper"],"backgroundTag":"internal-invariant-violation","analyzedSha":"b5bda4fb4935ae8b3869b422454ae3b3896c7bc1","analyzedAt":"2026-09-08T00:44:01.258Z","contentChangedAt":"2026-09-08T00:44:01.258Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}