-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdebug.Rmd
More file actions
121 lines (81 loc) · 3.45 KB
/
debug.Rmd
File metadata and controls
121 lines (81 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Pour aller plus loin : débogage
## Débogage | Affichage console
- Un des premiers niveaux de débogage est l'utilisation de ``print`` console au-sein de l'application shiny.
- Cela permet d'afficher des informations lors du développement et/ou de l'éxécution de l'application
- Dans __shiny__, on utilisera de préférence ``cat(file=stderr(), ...)`` pour être sûr que l'affichage marche dans tous les cas d'outputs, et également dans les logs avec __shiny-server__
```{r, eval = FALSE}
output$distPlot <- renderPlot({
x <- iris[, input$variable]
cat(file=stderr(), class(x)) # affichage de la classe de x
hist(x)
})
```
## Débogage | Affichage console
<div style="text-align:center" markdown="1">
<img src="img/debug_cat.png" alt="Drawing" style="width: 90%;">
</div>
## Débogage | Lancement manuel d'un browser
- On peut insérer le lancement d'un ``browser()`` à n'importe quel moment
- On pourra alors observer les différents objets et avancer pas-à-pas
```{r, eval = FALSE}
output$distPlot <- renderPlot({
x <- iris[, input$variable]
browser() # lancement du browser
hist(x)
})
```
- Ne pas oublier de l'enlever une fois le développement terminé...!
## Débogage | Lancement manuel d'un browser
<div style="text-align:center" markdown="1">
<img src="img/debug_browser.png" alt="Drawing" style="width: 90%;">
</div>
## Débogage | Lancement automatique d'un browser
- L'option ``options(shiny.error = browser)`` permet de lancer un ``browser()`` automatiquement lors de l'apparition d'une erreur
```{r, eval = FALSE}
options(shiny.error = browser)
```
## Débogage | Mode "showcase"
- En lançant une application avec l'option ``display.mode="showcase"`` et l'utilisation de la fonction ``runApp()``,
on peut observer en direct l'éxécution du code :
```{r, eval = FALSE}
runApp("path/to/myapp", display.mode="showcase")
```
## Débogage | Mode "showcase"
<div style="text-align:center" markdown="1">
<img src="img/debug_showcase.png" alt="Drawing" style="width: 90%;">
</div>
## Débogage | Reactive log
- En activant l'option ``shiny.reactlog``, on peut visualiser à tous instants les dépendances et les flux entre les objets réactifs de __shiny__
+ soit en tappant ``ctrl+F3`` dans le navigateur web
+ soit en insérant ``showReactLog()`` au-sein du code shiny
```{r, eval = FALSE}
options(shiny.reactlog=TRUE)
output$distPlot <- renderPlot({
x <- iris[, input$variable]
showReactLog() # launch shiny.reactlog
hist(x)
})
```
## Débogage | Reactive log
<div style="text-align:center" markdown="1">
<img src="img/debug_log.png" alt="Drawing" style="width: 90%;">
</div>
## Débogage | Communication client/server
- Toutes les communications entre le client et le server sont visibles en utilisant l'option ``shiny.trace``
```{r, eval = FALSE}
options(shiny.trace = TRUE)
```
## Débogage | Communication client/server
<div style="text-align:center" markdown="1">
<img src="img/debug_trace.png" alt="Drawing" style="width: 90%;">
</div>
## Débogage | Traçage des erreurs
- Depuis ``shiny_0.13.1``, on récupère la stack trace quand une erreur se produit
- Si besoin, on peut récupérer une stack trace encore plus complète, comprenant les diffénrets fonctions internes, avec ``options(shiny.fullstacktrace = TRUE)``
```{r, eval = FALSE}
options(shiny.fullstacktrace = TRUE)
```
## Débogage | Traçage des erreurs
<div style="text-align:center" markdown="1">
<img src="img/debug_stack.png" alt="Drawing" style="width: 90%;">
</div>