# Racket Mode: user breakpoints with conditions and actions

**URL:** <https://racket.discourse.group/t/racket-mode-user-breakpoints-with-conditions-and-actions/911>\
**Category:** General\
**Created:** [April 21, 2022, 6:44pm UTC](https://racket.discourse.group/t/racket-mode-user-breakpoints-with-conditions-and-actions/911 "2022-04-21T18:44:34Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![greghendershott](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/greghendershott/32/98_2.png) [@greghendershott](https://racket.discourse.group/u/greghendershott)\
**Post date:** [April 21, 2022, 6:44pm UTC](https://racket.discourse.group/t/racket-mode-user-breakpoints-with-conditions-and-actions/911/1 "2022-04-21T18:44:34Z")

</div>

Just a heads up that I merged an enhancement to the step debugger in Racket Mode.

Previously you had a "run to here" command, which you could think of as one, temporary, unconditional breakpoint at a time.

Now you can also set multiple, persistent breakpoints. Each has a _condition_ (a Racket expression, which can refer to locals around the breakpoint) and a list of _actions_ (any of `break`, `print`, `log`). The combination of the condition `#t` and the actions list `(break)` is a simple unconditional breakpoint. [More details here](https://www.racket-mode.com/#racket_002ddebug_002dtoggle_002dbreakpoint).

Behind the scenes, this uses the same annotator as does the Dr Racket debugger. In other words, step debugging your program means it effectively rewrites your program into a "step-debug-able" version of your program.
