R: Debug a Function (original) (raw)

debug {base} R Documentation

Description

Set, unset or query the debugging flag on a function. The text and condition arguments are the same as those that can be supplied via a call to [browser](../../base/help/browser.html). They can be retrieved by the user once the browser has been entered, and provide a mechanism to allow users to identify which breakpoint has been activated.

Usage

debug(fun, text = "", condition = NULL, signature = NULL)
debugonce(fun, text = "", condition = NULL, signature = NULL)
undebug(fun, signature = NULL)
isdebugged(fun, signature = NULL)
debuggingState(on = NULL)

Arguments

fun any interpreted R function or a character string naming one.
text a text string that can be retrieved when the browser is entered.
condition a condition that can be retrieved when the browser is entered.
signature an optional method signature. If specified, the method is debugged, rather than its generic.
on logical; a call to the support functiondebuggingState returns TRUE if debugging is globally turned on, FALSE otherwise. An argument of one or the other of those values sets the state. If the debugging state isFALSE, none of the debugging actions will occur (but explicitbrowser calls in functions will continue to work).

Details

When a function flagged for debugging is entered, normal execution is suspended and the body of function is executed one statement at a time. A new [browser](../../base/help/browser.html) context is initiated for each step (and the previous one destroyed).

At the debug prompt the user can enter commands or R expressions, followed by a newline. The commands are described in the[browser](../../base/help/browser.html) help topic.

To debug a function which is defined inside another function, single-step through to the end of its definition, and then calldebug on its name.

If you want to debug a function not starting at the very beginning, use [trace](../../base/help/trace.html)(..., at = *) or [setBreakpoint](../../utils/html/findLineNum.html).

Using debug is persistent, and unless debugging is turned off the debugger will be entered on every invocation (note that if the function is removed and replaced the debug state is not preserved). Use debugonce() to enter the debugger only the next time the function is invoked.

To debug an S4 method by explicit signature, usesignature. When specified, signature indicates the method offun to be debugged. Note that debugging is implemented slightly differently for this case, as it uses the trace machinery, rather than the debugging bit. As such, text and condition cannot be specified in combination with a non-null signature. For methods which implement the .local rematching mechanism, the.local closure itself is the one that will be ultimately debugged (see [isRematched](../../methods/help/isRematched.html)).

isdebugged returns TRUE if a) signature is NULLand the closure fun has been debugged, or b) signature is notNULL, fun is an S4 generic, and the method of funfor that signature has been debugged. In all other cases, it returnsFALSE.

The number of lines printed for the deparsed call when a function is entered for debugging can be limited by setting[options](../../base/help/options.html)(deparse.max.lines).

When debugging is enabled on a byte compiled function then the interpreted version of the function will be used until debugging is disabled.

Value

debug and undebug invisibly return NULL.

isdebugged returns TRUE if the function or method is

marked for debugging, and FALSE otherwise.

See Also

[debugcall](../../utils/html/debugcall.html) for conveniently debugging methods,[browser](../../base/help/browser.html) notably for its ‘_commands_’, [trace](../../base/help/trace.html);[traceback](../../base/help/traceback.html) to see the stack after an Error: ...message; [recover](../../utils/html/recover.html) for another debugging approach.

Examples

## Not run: 
debug(library)
library(methods)

## End(Not run)
## Not run: 
debugonce(sample)
## only the first call will be debugged
sample(10, 1)
sample(10, 1)

## End(Not run)

[Package _base_ version 4.6.0 Index]