Treefix: Enabling Execution with a Tree of Prefixes
Beatriz Souza, Michael Pradel
TL;DR
Treefix introduces a three-step, LLM-driven framework that constructs a tree of code prefixes to enable execution of incomplete Python snippets. By statically identifying undefined references, iteratively refining prefixes via runtime errors, and targeting uncovered lines, it achieves substantially higher line coverage than state-of-the-art baselines, with open-source and Stack Overflow snippets reaching up to $84\%$ and $82\%$ coverage respectively. The approach produces a large, diverse set of concrete values (over $16{,}000$ unique values across $1{,}462$ snippets) and demonstrates practical effectiveness while maintaining manageable prefix sets and execution costs. The results show that each step contributes meaningfully, dependency resolution via pipreqs is important, and the method enables multiple execution paths, which is beneficial for dynamic analysis tasks. Treefix thus offers a scalable, open-source path toward robust execution of arbitrary code snippets in environments with missing context and dependencies, with data and prompts available for replication.
Abstract
The ability to execute code is a prerequisite for various dynamic program analyses. Learning-guided execution has been proposed as an approach to enable the execution of arbitrary code snippets by letting a neural model predict likely values for any missing variables. Although state-of-the-art learning-guided execution approaches, such as LExecutor, can enable the execution of a relative high amount of code, they are limited to predicting a restricted set of possible values and do not use any feedback from previous executions to execute even more code. This paper presents Treefix, a novel learning-guided execution approach that leverages LLMs to iteratively create code prefixes that enable the execution of a given code snippet. The approach addresses the problem in a multi-step fashion, where each step uses feedback about the code snippet and its execution to instruct an LLM to improve a previously generated prefix. This process iteratively creates a tree of prefixes, a subset of which is returned to the user as prefixes that maximize the number of executed lines in the code snippet. In our experiments with two datasets of Python code snippets, Treefix achieves 25% and 7% more coverage relative to the current state of the art in learning-guided execution, covering a total of 84% and 82% of all lines in the code snippets.
