Skip to content

Commit c2418ad

Browse files
updates
1 parent 6eee4f2 commit c2418ad

12 files changed

+196
-116
lines changed

Diff for: demo/error_inspector.R

+2
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ g <- function(x) f(x)
1515
g(factor("a,b"))
1616

1717

18+
19+
options(error = recover)

Diff for: demo/trace-colSums.R

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
colSums(1:3)
3+
4+
5+
6+
7+
8+
trace(colSums, browser)
9+
colSums(1:3)
10+
# ls.str() in browser
11+
untrace(colSums)
12+
13+
14+
15+
x <- as.list(body(colSums))
16+
View(x)
17+
18+
19+
# identify spot to insert code
20+
as.list(x[[3]][[1]])
21+
# equivalent notation
22+
as.list(x[[c(3, 1)]])
23+
24+
# insert browser at step 3.1
25+
trace(colSums, browser, at = list(c(3, 1)))
26+
# execute function
27+
colSums(1:3)
28+
# ls.str() handy in browser
29+
# cancel tracing
30+
untrace(colSums)
31+
32+

Diff for: demo/trace-strsplit.R

-17
This file was deleted.

Diff for: demo/trace.R

-17
This file was deleted.

Diff for: img/IDE_break-in-code.PNG

61 KB
Loading

Diff for: img/IDE_error-inspector.PNG

65.3 KB
Loading

Diff for: img/IDE_message-only.PNG

54.9 KB
Loading

Diff for: img/colSums-body.png

26.7 KB
Loading

Diff for: img/colSums-list-investigate.PNG

97.9 KB
Loading

Diff for: img/colSums-list.PNG

79.9 KB
Loading

Diff for: index.html

+78-47
Original file line numberDiff line numberDiff line change
@@ -881,10 +881,21 @@ <h2>IDE on error</h2>
881881
<p>Automatically invoke actions on error.</p>
882882

883883
<img data-src="img/IDE_debug_menu.png" style="width:70.0%" class="r-stretch"></section>
884-
<section id="ide-on-error-options" class="slide level2">
885-
<h2>IDE on error options</h2>
884+
<section id="ide-message-only" class="slide level2">
885+
<h2>IDE message only</h2>
886+
<p><br></p>
887+
888+
<img data-src="img/IDE_message-only.PNG" class="r-stretch"></section>
889+
<section id="ide-error-inspector" class="slide level2">
890+
<h2>IDE error inspector</h2>
891+
<p><br></p>
892+
893+
<img data-src="img/IDE_error-inspector.PNG" class="r-stretch"></section>
894+
<section id="ide-break-in-code" class="slide level2">
895+
<h2>IDE break in code</h2>
896+
<p><br></p>
886897

887-
<img data-src="img/IDE_debug_on-error.png" class="r-stretch quarto-figure-left"></section>
898+
<img data-src="img/IDE_break-in-code.PNG" class="r-stretch"></section>
888899
<section id="debugging-console" class="slide level2">
889900
<h2>Debugging console</h2>
890901

@@ -950,64 +961,80 @@ <h2>debugonce()</h2>
950961
</ul>
951962
</section>
952963
<section id="trace-overview" class="slide level2">
953-
<h2><code>trace()</code> overview</h2>
954-
<p><br></p>
964+
<h2>trace() overview</h2>
965+
<p><code>trace()</code> is a more flexible version of <code>debug()</code></p>
955966
<ul>
956-
<li><p><code>trace()</code> allows you to insert debugging code <br>(e.g., a call to <code>browser</code> or <code>recover</code>)<br> at chosen places in any function.</p></li>
957-
<li><p>a call to <code>untrace</code> cancels the tracing.</p></li>
967+
<li><p><code>trace(fun, browser)</code> = <code>debug(fun)</code></p></li>
968+
<li><p>equivalent to inserting <code>broswer()</code> in first line of function</p></li>
969+
</ul>
970+
<div class="fragment">
971+
<p>you an also insert <em>any</em> code at <em>any</em> location in function</p>
972+
<ul>
973+
<li><code>trace(fun, browser, at = 2)</code> <br>inserts <code>browser()</code> at second step of <code>fun</code></li>
958974
</ul>
959-
</section>
960-
<section id="trace-where-to-insert" class="slide level2">
961-
<h2><code>trace()</code> where to insert</h2>
962-
<p><br></p>
963-
<div class="cell">
964-
<div class="sourceCode cell-code" id="cb17" data-code-line-numbers="3"><pre class="sourceCode numberSource r number-lines code-with-copy"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1"></a>f <span class="ot">&lt;-</span> <span class="cf">function</span>(x) { x <span class="sc">+</span> <span class="dv">1</span> }</span>
965-
<span id="cb17-2"><a href="#cb17-2"></a>g <span class="ot">&lt;-</span> <span class="cf">function</span>(x) { <span class="fu">f</span>(x) }</span>
966-
<span id="cb17-3"><a href="#cb17-3"></a>x <span class="ot">&lt;-</span> <span class="fu">as.list</span>(<span class="fu">body</span>(g))</span>
967-
<span id="cb17-4"><a href="#cb17-4"></a>x</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
968-
<div class="cell-output cell-output-stdout">
969-
<pre><code>[[1]]
970-
`{`
971-
972-
[[2]]
973-
f(x)</code></pre>
974-
</div>
975975
</div>
976-
<p><br></p>
977-
<p>use <code>as.list</code> to investigate 🧐 the function</p>
978976
<div class="fragment">
979-
<p><br></p>
977+
<p><code>untrace(fun)</code> cancels the tracing</p>
980978
<p>⚠️ <code>trace()</code> requires <code>{</code> in function definition</p>
981979
</div>
982980
</section>
983-
<section id="traceintiate-browser" class="slide level2">
984-
<h2><code>trace()</code>intiate browser</h2>
981+
<section id="trace-default" class="slide level2">
982+
<h2>trace() default</h2>
985983
<p><br></p>
986984
<div class="cell">
987-
<div class="sourceCode cell-code" id="cb19"><pre class="sourceCode numberSource r number-lines code-with-copy"><code class="sourceCode r"><span id="cb19-1"><a href="#cb19-1"></a><span class="co"># specify browser to initiate at second step in function</span></span>
988-
<span id="cb19-2"><a href="#cb19-2"></a><span class="fu">trace</span>(g, browser, <span class="at">at =</span> <span class="fu">list</span>(<span class="fu">c</span>(<span class="dv">2</span>)))</span>
989-
<span id="cb19-3"><a href="#cb19-3"></a></span>
990-
<span id="cb19-4"><a href="#cb19-4"></a><span class="co"># call function to initiate browser</span></span>
991-
<span id="cb19-5"><a href="#cb19-5"></a><span class="fu">g</span>(<span class="st">"a"</span>)</span>
992-
<span id="cb19-6"><a href="#cb19-6"></a></span>
993-
<span id="cb19-7"><a href="#cb19-7"></a><span class="co"># cancel tracing</span></span>
994-
<span id="cb19-8"><a href="#cb19-8"></a><span class="fu">untrace</span>(g)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
985+
<div class="sourceCode cell-code" id="cb17" data-code-line-numbers="1,4"><pre class="sourceCode numberSource r number-lines code-with-copy"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1"></a><span class="fu">trace</span>(colSums, browser)</span>
986+
<span id="cb17-2"><a href="#cb17-2"></a><span class="fu">colSums</span>(<span class="dv">1</span><span class="sc">:</span><span class="dv">3</span>)</span>
987+
<span id="cb17-3"><a href="#cb17-3"></a><span class="co"># ls.str() in browser</span></span>
988+
<span id="cb17-4"><a href="#cb17-4"></a><span class="fu">untrace</span>(colSums)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
995989
</div>
990+
<p><br></p>
991+
<ul>
992+
<li><p><code>trace(colSums, browser)</code> = <code>debug(colSums)</code></p></li>
993+
<li><p>equivalent to inserting <code>broswer()</code> in first line of function <br> if we had the source code</p></li>
994+
</ul>
996995
</section>
997-
<section id="trace-intiate-recover" class="slide level2">
998-
<h2><code>trace()</code> intiate recover</h2>
996+
<section id="navigating-function-steps" class="slide level2">
997+
<h2>navigating function steps</h2>
999998
<p><br></p>
1000-
<p>general idea, buggy on this example</p>
999+
<p>investigate 🧐 the function with <code>as.list()</code> + <code>body()</code></p>
1000+
<p><brshort></brshort></p>
1001+
<div class="cell">
1002+
<div class="sourceCode cell-code" id="cb18"><pre class="sourceCode numberSource r number-lines code-with-copy"><code class="sourceCode r"><span id="cb18-1"><a href="#cb18-1"></a>x <span class="ot">&lt;-</span> <span class="fu">as.list</span>(<span class="fu">body</span>(colSums))</span>
1003+
<span id="cb18-2"><a href="#cb18-2"></a><span class="fu">View</span>(x)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
1004+
</div>
1005+
<p><brshort></brshort></p>
1006+
<div class="fragment">
1007+
<div class="columns">
1008+
<div class="column" style="width:40%;">
1009+
<p><img data-src="img/colSums-body.PNG"></p>
1010+
</div><div class="column" style="width:2%;">
1011+
1012+
</div><div class="column" style="width:58%;">
1013+
<p><img data-src="img/colSums-list.PNG"></p>
1014+
</div>
1015+
</div>
1016+
</div>
1017+
</section>
1018+
<section id="identify-function-step" class="slide level2">
1019+
<h2>identify function step</h2>
1020+
1021+
<img data-src="img/colSums-list-investigate.PNG" class="r-stretch"></section>
1022+
<section id="trace-at-specified-step" class="slide level2">
1023+
<h2>trace() at specified step</h2>
10011024
<p><br></p>
10021025
<div class="cell">
1003-
<div class="sourceCode cell-code" id="cb20"><pre class="sourceCode numberSource r number-lines code-with-copy"><code class="sourceCode r"><span id="cb20-1"><a href="#cb20-1"></a><span class="co"># specify recover to initiate at second step in function</span></span>
1004-
<span id="cb20-2"><a href="#cb20-2"></a><span class="fu">trace</span>(g, recover, <span class="at">at =</span> <span class="fu">list</span>(<span class="fu">c</span>(<span class="dv">2</span>)))</span>
1005-
<span id="cb20-3"><a href="#cb20-3"></a></span>
1006-
<span id="cb20-4"><a href="#cb20-4"></a><span class="co"># call function to initiate browser</span></span>
1007-
<span id="cb20-5"><a href="#cb20-5"></a><span class="fu">g</span>(<span class="st">"a"</span>)</span>
1008-
<span id="cb20-6"><a href="#cb20-6"></a></span>
1009-
<span id="cb20-7"><a href="#cb20-7"></a><span class="co"># cancel tracing</span></span>
1010-
<span id="cb20-8"><a href="#cb20-8"></a><span class="fu">untrace</span>(g)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
1026+
<div class="sourceCode cell-code" id="cb19" data-code-line-numbers="7,12"><pre class="sourceCode numberSource r number-lines code-with-copy"><code class="sourceCode r"><span id="cb19-1"><a href="#cb19-1"></a><span class="co"># identify spot to insert code</span></span>
1027+
<span id="cb19-2"><a href="#cb19-2"></a><span class="fu">as.list</span>(x[[<span class="dv">3</span>]][[<span class="dv">1</span>]])</span>
1028+
<span id="cb19-3"><a href="#cb19-3"></a><span class="co"># equivalent notation</span></span>
1029+
<span id="cb19-4"><a href="#cb19-4"></a><span class="fu">as.list</span>(x[[<span class="fu">c</span>(<span class="dv">3</span>, <span class="dv">1</span>)]])</span>
1030+
<span id="cb19-5"><a href="#cb19-5"></a></span>
1031+
<span id="cb19-6"><a href="#cb19-6"></a><span class="co"># insert browser at step 3.1</span></span>
1032+
<span id="cb19-7"><a href="#cb19-7"></a><span class="fu">trace</span>(colSums, browser, <span class="at">at =</span> <span class="fu">list</span>(<span class="fu">c</span>(<span class="dv">3</span>, <span class="dv">1</span>)))</span>
1033+
<span id="cb19-8"><a href="#cb19-8"></a><span class="co"># execute function</span></span>
1034+
<span id="cb19-9"><a href="#cb19-9"></a><span class="fu">colSums</span>(<span class="dv">1</span><span class="sc">:</span><span class="dv">3</span>)</span>
1035+
<span id="cb19-10"><a href="#cb19-10"></a><span class="co"># ls.str() handy in browser</span></span>
1036+
<span id="cb19-11"><a href="#cb19-11"></a><span class="co"># cancel tracing</span></span>
1037+
<span id="cb19-12"><a href="#cb19-12"></a><span class="fu">untrace</span>(colSums)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
10111038
</div>
10121039
</section></section>
10131040
<section>
@@ -1017,6 +1044,10 @@ <h1>Special cases</h1>
10171044
</section>
10181045
<section id="warnings" class="slide level2">
10191046
<h2>Warnings</h2>
1047+
<p>If you want to dig deeper into a warning, you can convert them to errors.</p>
1048+
<div class="cell">
1049+
1050+
</div>
10201051
</section>
10211052
<section id="piped-expressions" class="slide level2">
10221053
<h2>Piped expressions</h2>

0 commit comments

Comments
 (0)