Debug2Fix: Can Interactive Debugging Help Coding Agents Fix More Bugs?
Organizations: Microsoft USA
Abstract
While significant progress has been made in automating various aspects of software development through coding agents, there is still significant room for improvement in their bug fixing capabilities. Debugging and investigation of runtime behavior remains largely a manual, developer-driven process. Popular coding agents typically rely on either static analysis of the code or iterative test-fix cycles, which is akin to trial and error debugging. We posit that there is a wealth of rich runtime information that developers routinely access while debugging code, which agents are currently deprived of due to design limitations. Despite how prevalent debuggers are in modern IDEs and command-line tools, they have surprisingly not made their way into coding agents. In this work, we introduce Debug2Fix, a novel framework that incorporates interactive debugging as a core component of a software engineering agent via a subagent architecture. We incorporate debuggers for Java and Python into our agent framework and evaluate against GitBug-Java and SWE-Bench-Live and achieve >20% improvement in performance compared to the baseline for certain models. Furthermore, using our framework, we're able to make weaker models like GPT-5 and Claude Haiku 4.5 match or exceed the performances of stronger models like Claude Sonnet 4.5, showing that better tool design is often just as important as switching to a more expensive model. Finally, we conduct systematic ablations demonstrating the importance of both the subagent architecture and debugger integration.
Figures & tables
| Category | Description | % Cases | # Instances |
|---|---|---|---|
| Exception Diagnosis | Identifying the type, origin, or cause of runtime exceptions. | 27.8% | 17 |
| Root Cause Analysis | Understanding why a specific behavior or bug occurs. | 25.3% | 15 |
| Local Variable Inspection | Querying the value of specific variables at a location. | 15.2% | 11 |
| Attribute Value Inspection | Inspecting object attributes or map entries. | 15.2% | 9 |
| Assertion Failure | Identifying which assertion fails and the actual vs expected values. | 6.3% | 5 |
| Code Reachability | Checking if execution reaches a specific location or branch. | 5.1% | 4 |
| Failure Mode | Description | % Cases | # Instances |
|---|---|---|---|
| Debugger Session Failed | Debug Subagent could not attach JDB due to failed build/test. This could be due to a variety of reasons like missing Gradle task, test process exited before debugger attached, etc. | 36% | 18 |
| Wrong Fix Despite Correct Debugging | Debug Subagent successfully answered the runtime question, but the main agent applied an incorrect or incomplete fix. | 34% | 17 |
| High Complexity Bug | Bug required 3 debug sessions, yet the agent could not converge on the correct fix despite these multiple attempts. | 16% | 8 |
| Subagent API Error | Debug Subagent request failed due to server errors, which results in an empty response. | 8% | 4 |
| Subagent Static Analysis | Debug Subagent ends up doing static code analysis, providing incomplete information without actual runtime values. | 6% | 3 |
Coding Agents
Coding agents use language models, tools, and feedback to modify software and complete engineering tasks.
See all 140 papers