I assume you're asking about debugging equations, since debugging recursive RPN programs is no different than debugging any other RPN program.
The most commonly used tools for debugging are STOP, which you can insert into a program to make it stop running. Once stopped, you can execute it step-by-step using SST (a.k.a. SST↓, Step Into), SST→ (Step Over), and SST↑ (Step Out), and you can use R/S to resume execution. While stopped, you can use VIEW to look at variables and registers without disturbing the stack.
In an equation, you can insert a STOP using the STOP() function. This function takes one argument and returns it unchanged, so wrapping STOP() around a subexpression causes STOP to be performed after that subexpression has finished evaluating.
SST↓, SST→, and SST↑ work while evaluating expressions, but what you're actually stepping through in that case is the RPN code that was generated by the equation parser, and it won't always be obvious which part of the equation corresponds to the current RPN program line. TRACE and STRACE modes help with this, by printing the current position in the equation text in addition to the current RPN program line.
Hmmm, now that I'm thinking about this, it would be useful to have a VIEW() function, so you could make an equation print variables while it is executing, without having to use breakpoints or single-stepping. I'll add that in the next build.