When used in a *-check chunk or inside grade_this(), debug_this()
displays in the learnr tutorial a complete listing of the variables
and environment available for checking. This can be helpful when you need
to debug an exercise and a submission.
Usage
debug_this(check_env = parent.frame())Arguments
- check_env
A grade checking environment. You can use
mock_this_exercise()to prepare a mocked exercise submission environment. Otherwise, you don't need to use or set this argument.
Value
Returns a neutral grade containing a message that includes any
and all information available about the exercise and the current
submission. The output lets you visually explore the objects available for
use within your grade_this() grading code.
Debugging exercises
debug_this() gives you a few ways to see the objects that are
available inside grade_this() for you to use when grading exercise
submissions. Suppose we have this example exercise:
```{r example-setup}
x <- 1
```
```{r example, exercise = TRUE}
# user submits
y <- 2
x + y
```
```{r example-solution}
x + 3
```The debug output will look like the following when used as described below.
Exercise label (
.label):example
Engine (.engine):rSubmission (
.result,.user,.last_value):[1] 3Solution (
.solution):[1] 4
.envir_prep$ x: num 1
.envir_result$ x: num 1
.envir_solution$ x: num 1
.user_code# user submits x + 2
.solution_codex + 3
Always debug
The first method is the most straight-forward.
Inside the *-check or *-error-check chunks for your exercise,
simply call debug_this():
Every time you submit code for feedback via Submit Answer, the debug information will be printed.
Debug specific cases
On the other hand, if you want to debug a specific submission,
such as a case where a submission isn't matching any of your current grading conditions,
you can call debug_this() wherever you like inside grade_this().
Debug default fail condition
It's common to have the grade-checking code
default to an incorrect grade with code feedback
by calling fail() at the end of the checking code in grade_this().
During development of a tutorial,
you may want to have this default fail() return the debugging information
rather than a failure.
By setting the global option gradethis.fail to use debug_this(),
```{r setup}
library(learnr)
library(gradethis)
gradethis_setup()
option(gradethis.fail = "{debug_this()}")
```you can see the values that are available to you during the submission check whenever your test submissions pass through your other checks.
Don't forget to reset or unset the gradethis.fail option
when you're done working on your tutorial.
Examples
# Suppose we have an exercise (guess the number 42). Mock a submission:
submission <- mock_this_exercise(.user_code = 40, .solution_code = 11 + 31)
# Call `debug_this()` inside your *-check chunk, is equivalent to
debug_this()(submission)$message
#> <p>
#> <strong>Exercise label (<code>.label</code>):</strong>
#> <code>mock</code>
#> <br/>
#> <strong>Engine (<code>.engine</code>):</strong>
#> <code>r</code>
#> </p>
#> <p>
#> Submission (<code>.result</code>, <code>.user</code>, <code>.last_value</code>):
#> <pre class="r"><code>[1] 40</code></pre>
#> </p>
#> <p>
#> Solution (<code>.solution</code>):
#> <pre class="r"><code>[1] 42</code></pre>
#> </p>
#> <details>
#> <summary>
#> <code>.envir_prep</code>
#> </summary>
#> <pre><code></code></pre>
#> </details>
#> <details>
#> <summary>
#> <code>.envir_result</code>
#> </summary>
#> <pre><code></code></pre>
#> </details>
#> <details>
#> <summary>
#> <code>.envir_solution</code>
#> </summary>
#> <pre><code></code></pre>
#> </details>
#> <details>
#> <summary>
#> <code>.user_code</code>
#> </summary>
#> <pre class="r"><code>40</code></pre>
#> </details>
#> <details>
#> <summary>
#> <code>.solution_code</code>
#> </summary>
#> <pre class="r"><code>11 + 31</code></pre>
#> </details>
# The remaining examples produce equivalent output
if (FALSE) { # \dontrun{
# Or you can call `debug_this()` inside a `grade_this()` call
# at the point where you want to get debug feedback.
grade_this({
pass_if_equal(42, "Good stuff!")
# Find out why this is failing??
debug_this()
})(submission)
# Set default `fail()` message to show debug information
# (for tutorial development only!)
old_opts <- options(gradethis.fail = "{debug_this()}")
grade_this({
pass_if_equal(42, "Good stuff!")
fail()
})(submission)
# default fail() will show debug until you reset gradethis.fail option
options(old_opts)
} # }
