{"id":220,"date":"2017-04-06T19:13:55","date_gmt":"2017-04-06T19:13:55","guid":{"rendered":"http:\/\/learningcenter.paratools.com\/?p=220"},"modified":"2022-04-14T14:04:48","modified_gmt":"2022-04-14T14:04:48","slug":"les-interfaces-de-gdb","status":"publish","type":"post","link":"https:\/\/learningcenter.paratools.com\/?p=220","title":{"rendered":"Les interfaces de GDB"},"content":{"rendered":"<p>Dans cet article nous pr\u00e9senterons diverses couches graphiques gratuites de GDB. Nous pr\u00e9senterons succintement leur installation suivie de quelques cas d&rsquo;usage.<\/p>\n<p><!--more--><\/p>\n<h1>Am\u00e9liorer la sortie de GDB<\/h1>\n<p>Pour commencer, il est possible de rendre GDB un peu plus lisible. En utilisant le fichier de configuration gdbinit, localis\u00e9 dans votre $HOME. Il existe de nombreux fichier et de nombreuse mani\u00e8re d&rsquo;adapter GDB par ce biais. Il est possible et conseill\u00e9 d&rsquo;en prendre un \u00ab\u00a0tout fait\u00a0\u00bb. Par exemple <a href=\"https:\/\/github.com\/gdbinit\/Gdbinit\">ICI<\/a>.<\/p>\n<p>Voici une proc\u00e9dure d&rsquo;installation simplifi\u00e9e:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd #se placer dans le $HOME\r\nwget https:\/\/raw.githubusercontent.com\/gdbinit\/Gdbinit\/master\/gdbinit\r\nmv gdbinit .gdbinit\r\n<\/pre>\n<p>Vous pouvez maintenant apr\u00e9cier un GDB un peu plus verbeux:<\/p>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/color.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-227\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/color.jpeg\" alt=\"\" width=\"800\" height=\"251\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/color.jpeg 1780w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/color-300x94.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/color-768x241.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/color-940x295.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h1>Le mode TUI de GDB<\/h1>\n<p>GDB fournit nativement une vue graphique bas\u00e9e sur ncurses. Elle permet de mieux visualiser le code source et ou l&rsquo;assembleur. Pour voir l&rsquo;aide relative \u00e0 cette interface faites :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n(gdb) help layout\r\nChange the layout of windows.\r\nUsage: layout prev | next | &amp;lt;layout_name&amp;gt;\r\nLayout names are:\r\n   src   : Displays source and command windows.\r\n   asm   : Displays disassembly and command windows.\r\n   split : Displays source, disassembly and command windows.\r\n   regs  : Displays register window. If existing layout\r\n           is source\/command or assembly\/command, the\r\n           register window is displayed. If the\r\n           source\/assembly\/command (split) is displayed,\r\n           the register window is displayed with\r\n           the window that has current logical focus.\r\n<\/pre>\n<p>On retrouve ici diff\u00e9rents layouts que nous allons rapidement illuster. Cot\u00e9 usage ces interfaces sont pratiques quand le mode ligne de commande ne suffit plus. Le vue source pour se \u00ab\u00a0retrouver\u00a0\u00bb dans le code. Du cot\u00e9 de l&rsquo;assembleur, la vue \u00ab\u00a0regs\u00a0\u00bb est \u00e0 privil\u00e9gier. Vous noterez tout de m\u00eame que parfois le TUI a des probl\u00e8mes de rafraichissement. C&rsquo;est pour cela que des solutions telles que CGBD peuvent \u00eatre pr\u00e9f\u00e9rables.<\/p>\n<h2>Le mode source<\/h2>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n(gdb) layout src\r\n<\/pre>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/src.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-221\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/src.jpeg\" alt=\"\" width=\"800\" height=\"366\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/src.jpeg 1656w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/src-300x137.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/src-768x352.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/src-940x430.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h2>Le mode\u00a0assembleur<\/h2>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n(gdb) layout asm\r\n<\/pre>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/asm.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-222\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/asm.jpeg\" alt=\"\" width=\"800\" height=\"365\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/asm.jpeg 1646w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/asm-300x137.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/asm-768x350.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/asm-940x428.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h2>Le mode\u00a0assembleur<\/h2>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n(gdb) layout split\r\n<\/pre>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/split.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-223\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/split.jpeg\" alt=\"\" width=\"800\" height=\"358\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/split.jpeg 1648w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/split-300x134.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/split-768x344.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/split-940x421.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h2>Le mode registres<\/h2>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n(gdb) layout regs\r\n<\/pre>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/regs.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-224\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/regs.jpeg\" alt=\"\" width=\"800\" height=\"364\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/regs.jpeg 1644w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/regs-300x136.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/regs-768x349.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/regs-940x428.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h1>CGDB<\/h1>\n<p>CGDB est une surcouche NCURSES \u00e0 GDB. Ce programme est tr\u00e8s pratique pour avoir un contexte tout en reposant sur une interface parfaitement fonctionnelle. Vous verrez que cela vaut beaucoup mieux que le mode TUI.<\/p>\n<p>Tout d&rsquo;abord installons CGDB:<\/p>\n<p>sur Centos 7:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nyum install cgdb\r\n<\/pre>\n<p>Et sur Ubuntu:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\napt-get install cgdb\r\n<\/pre>\n<p>Ensuite CGDB s&rsquo;utilise exactement comme GDB depuis la ligne de commande. Cela \u00e0 la diff\u00e9rence que l&rsquo;interface est maintenant dans un mode proche du TUI de gdb.<\/p>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/cgdb.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-229\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/cgdb.jpeg\" alt=\"\" width=\"800\" height=\"497\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/cgdb.jpeg 1656w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/cgdb-300x186.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/cgdb-768x477.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/cgdb-940x584.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Les commandes de base:<\/p>\n<ul>\n<li>ECHAP : Passer dans les sources\n<ul>\n<li>En mode source haut et bas pour se d\u00e9placer<\/li>\n<li>\/abc pour rechercher abc<\/li>\n<li>ESPACE pour ajouter un breakpoint \u00e0 la ligne courante<\/li>\n<li>\u00ab\u00a0&#8211;\u00a0\u00bb pour diminuer la fen\u00eatre du code<\/li>\n<li>\u00ab\u00a0=\u00a0\u00bb pour augmenter la fen\u00eatre du code<\/li>\n<li>:123 pour se rendre \u00e0 la ligne 123<\/li>\n<li>:help pour l&rsquo;aide<\/li>\n<li>:q pour quitter<\/li>\n<li>\u00ab\u00a0o\u00a0\u00bb pour ouvrir un fichier<\/li>\n<li>F5 : run<\/li>\n<li>F6 : continue<\/li>\n<li>F7 : finish<\/li>\n<li>F8 : next<\/li>\n<li>F10 : step<\/li>\n<\/ul>\n<\/li>\n<li>\u00ab\u00a0i\u00a0\u00bb pour repasser en mode commande (depuis le mode ECHAP)\n<ul>\n<li>Toutes les commandes GDB sont applicable sauf TUI<\/li>\n<li>Notez que votre .gdbinit peut conflicter et laisser des codes couleur dans la sortie<\/li>\n<li>PAGE UP : d\u00e9placer vers le haut<\/li>\n<li>PAGE DOWN : d\u00e9placer vers le bas<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h1>Data Display Debugger<\/h1>\n<p>Le debugger DDD pour Data Display Debugger peut para\u00eetre un peu vintage mais il est l&rsquo;un des front-end les plus avanc\u00e9. Il fournit par exemple des fonctionnalit\u00e9s graphiques \u00e9gal\u00e9es uniquement par des d\u00e9bugueur commerciaux tels que DDT (\u00e0 ne pas confondre).<\/p>\n<p>DDD s&rsquo;installe tr\u00e8s simplement:<\/p>\n<p>sur Centos 7:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nyum install ddd gnuplot\r\n<\/pre>\n<p>Et sur Ubuntu:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\napt-get install ddd gnuplot\r\n<\/pre>\n<p>Observons le code suivant :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;stdio.h&gt;\r\n#include &lt;math.h&gt;\r\n\r\nint main( int argc, char **argv )\r\n{\r\n\tdouble tab[100][100];\r\n\r\n\tint i,j;\r\n\tfor(i = 0 ; i &lt; 100 ; i++)\r\n\t{\r\n\t\tfor(j = 0 ; j &lt; 100 ; j++)\r\n\t\t{\r\n\t\t\ttab[i][j] = sin( i *  2.0*3.14\/100 ) * sin( j *  2.0*3.14\/100 ) ;\r\n\t\t}\r\n\t}\r\n\r\n\treturn 0;\r\n}\r\n<\/pre>\n<p>Et compilons le ainsi en d\u00e9bug (-g) et en liant la lib math (-lm-:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngcc .\/sin.c -o sin -g -lm\r\n<\/pre>\n<p>Ensuite lancez DDD :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nddd\r\n<\/pre>\n<p>Allez dans les param\u00e8tes (menu edit&gt;preferences) puis choisissez l&rsquo;onglet \u00ab\u00a0helper\u00a0\u00bb. Enfin pour plot window choisissez \u00ab\u00a0external\u00a0\u00bb. \u00a0Le but de cette manipulation est de contourner un bug de DDD emp\u00eachant l&rsquo;ouverture de GNUPLOT &#8212; vous \u00eatre libre d&rsquo;essayer ainsi peut \u00eatre que cela marchera chez vous.<\/p>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/ext.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-238\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/ext.jpeg\" alt=\"\" width=\"600\" height=\"388\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/ext.jpeg 1240w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/ext-300x194.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/ext-768x497.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/ext-940x608.jpeg 940w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Ouvrez votre binaire et cliquez trois fois sur la derni\u00e8re ligne du main pour placer un breakpoint. Puis lancez le en cliquant sur \u00ab\u00a0run\u00a0\u00bb dans la boite \u00e0 outils. Une fois le programme stopp\u00e9, le tableau tab sera remplis avec un sinus 3D. Maintenant affichons le ! Surlignez tab dans le code et cliquez sur \u00ab\u00a0plot\u00a0\u00bb en haut a droites :<\/p>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/plot.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-239\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/plot.jpeg\" alt=\"\" width=\"800\" height=\"898\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/plot.jpeg 1318w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/plot-267x300.jpeg 267w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/plot-768x862.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/plot-940x1056.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Constatez \u00e9galement que la fen\u00eatre est interractive ! Le programme appel\u00e9 est gnuplot. Cela peut bien entendu se reproduire en 2D:<\/p>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/PLOT1D.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-240\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/PLOT1D.jpeg\" alt=\"\" width=\"800\" height=\"919\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/PLOT1D.jpeg 1406w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/PLOT1D-261x300.jpeg 261w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/PLOT1D-768x883.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/PLOT1D-940x1080.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Voil\u00e0 qui rend DDD pas si vintage que cela et particuli\u00e8rement utile pour des applications num\u00e9riques en particulier. Concentrons nous maintenant sur une derni\u00e8re fonctionnalit\u00e9, l&rsquo;exploration des structures de donn\u00e9es. Consid\u00e9rons le programme suivant:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\r\n\r\nstruct block\r\n{\r\n\tint val;\r\n\tstruct block *prev;\r\n};\r\n\r\nstruct block * new_block( int val )\r\n{\r\n\tstruct block * ret = malloc(sizeof(struct block));\r\n\tret-&gt;val = val;\r\n\treturn ret;\r\n}\r\n\r\nint main(int argc, char **argv)\r\n{\r\n\tint i;\r\n\r\n\tstruct block * blocks = NULL;\r\n\r\n\tfor( i = 0 ; i &lt; 3 ; i++ ) { struct block * new = new_block( i ); new-&gt;prev = blocks;\r\n\t\tblocks = new;\r\n\t}\r\n\r\n\treturn 0;\r\n}\r\n<\/pre>\n<p>Compilons ce code en d\u00e9bug:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngcc .\/ls.c -o ls -g -lm\r\n<\/pre>\n<p>Lancons le dans DDD, ensuite placez un breakpoint sur la derni\u00e8re ligne. Puis lan\u00e7ez le programme. Maintenant, faites display sur la variable \u00ab\u00a0block\u00a0\u00bb. Ensuite double cliquez sur son addresse. Ensuite double-cliquez sur le pointeur prev de chacun des blocs et admirez:<\/p>\n<p><a href=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/chain.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" class=\"aligncenter wp-image-246\" src=\"http:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/chain.jpeg\" alt=\"\" width=\"800\" height=\"605\" srcset=\"https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/chain.jpeg 1898w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/chain-300x227.jpeg 300w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/chain-768x581.jpeg 768w, https:\/\/learningcenter.paratools.com\/wp-content\/uploads\/2017\/04\/chain-940x711.jpeg 940w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>En r\u00e9sum\u00e9, DDD est un d\u00e9bugueur singulier qui vaut le d\u00e9tours. Il est pratique pour explorer le contenu des variables et des structures de donn\u00e9es complexes de mani\u00e8re visuelle.<\/p>\n<h1>Nemiver<\/h1>\n<p>Bient\u00f4t<\/p>\n<h1><\/h1>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article nous pr\u00e9senterons diverses couches graphiques gratuites de GDB. Nous pr\u00e9senterons succintement leur installation suivie de quelques cas d&rsquo;usage.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27],"tags":[32,34,30,29,33,31,35],"_links":{"self":[{"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=\/wp\/v2\/posts\/220"}],"collection":[{"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=220"}],"version-history":[{"count":23,"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=\/wp\/v2\/posts\/220\/revisions"}],"predecessor-version":[{"id":327,"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=\/wp\/v2\/posts\/220\/revisions\/327"}],"wp:attachment":[{"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learningcenter.paratools.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}