# State of the Debugger

**URL:** <https://discourse.julialang.org/t/state-of-the-debugger/4308>\
**Category:** General Usage\
**Tags:** debug\
**Created:** [June 16, 2017, 3:51pm UTC](https://discourse.julialang.org/t/state-of-the-debugger/4308 "2017-06-16T15:51:04Z")\
**Posts on this page:** 1\
**Showing post:** 16

<div class="post-metadata">

**Author:** ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)\
**Post date:** [November 17, 2018, 10:37am UTC](https://discourse.julialang.org/t/state-of-the-debugger/4308/16 "2018-11-17T10:37:33Z")

</div>

You probably all know about [Rebugger](https://github.com/timholy/Rebugger.jl). I haven’t had any time to work on it lately, and probably won’t for a couple more months. I’d like to encourage people who are impatient for a debugger to jump in and help make it better. Here are reasons to consider this:

- Rebugger and Revise (upon which Rebugger is based) are pretty extensively documented, even down to the internals. I did this precisely to make it easier for others to contribute, but if anything it’s had the opposite effect.
- Rebugger is tiny: the core `src/debug.jl` file is currently 600 lines of code and, other than Revise, has no significant dependencies.
- Rebugger does _not_ interact with call stacks; everything is done in terms of julia expressions. That means anyone who has written or edited a macro or otherwise worked with Julia expressions has the background needed to pitch in—this is not rocket science.
- I’ve [outlined solutions](https://discourse.julialang.org/t/ann-rebugger-interactive-debugging-for-julia-0-7-1-0/13843/18) to things like how to add breakpoints. Once breakpoints are added, I think it can interact with graphical debuggers (aka, Juno).
- The Julia compiler team’s priorities linked above by Stefan (which is a fantastic list, and ordered the same way I’d order it) suggests it will be a while before there’s another solution, unless someone outside the team picks up Gallium on their own.

Here are some of the most impactful ways to help out:

- [\*] Revise’s `get_def` still fails to fetch expressions for too many functions. The failure presumably occurs in the signature-Dict lookup (`sigtmap`) as outlined [here](https://timholy.github.io/Revise.jl/stable/internals.html#The-structure-of-Revise's-internal-representation-1). Figuring what’s failing, and fixing it, would be one of the most important contributions. (Progress: [Use type intersection to match signatures to those of methods by timholy · Pull Request #213 · timholy/Revise.jl · GitHub](https://github.com/timholy/Revise.jl/pull/213), [Capture methods that have docstring + performance annotation by timholy · Pull Request #215 · timholy/Revise.jl · GitHub](https://github.com/timholy/Revise.jl/pull/215), [Better handling of stacktraces by timholy · Pull Request #52 · timholy/Rebugger.jl · GitHub](https://github.com/timholy/Rebugger.jl/pull/52))
- Add breakpoints
- When presenting expressions for Rebugger don’t expand macros (ref [Avoid expanding macros in function bodies with a docstring by timholy · Pull Request #210 · timholy/Revise.jl · GitHub](https://github.com/timholy/Revise.jl/pull/210))
- (Fairly simple with SnoopCompile, but tedious) Reduce Rebugger’s latency when you first start Julia or first load Rebugger
- Fix [display problem with long function · Issue #29 · timholy/Rebugger.jl · GitHub](https://github.com/timholy/Rebugger.jl/issues/29) (would benefit from someone who knows the REPL or is willing to learn) (note this is not necessary if Juno is your real target)
- Fix [Revise should "follow" files that go from add-\>dev · Issue #146 · timholy/Revise.jl · GitHub](https://github.com/timholy/Revise.jl/issues/146)

---

_[View the full topic](https://discourse.julialang.org/t/state-of-the-debugger/4308)._
