{"id":11043,"date":"2014-10-15T17:38:56","date_gmt":"2014-10-15T15:38:56","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11043"},"modified":"2014-10-15T17:56:06","modified_gmt":"2014-10-15T15:56:06","slug":"chisel-il-coltellino-svizzero-del-debug-ios-e-os-x","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/chisel-il-coltellino-svizzero-del-debug-ios-e-os-x\/","title":{"rendered":"Chisel: il coltellino svizzero del debug iOS e OS X"},"content":{"rendered":"<p><strong>Chisel<\/strong> (scalpello) \u00e8 il nome di un progetto OpenSource rilasciato da Facebook utile durante il <strong>debug di applicazioni iOS e OS X<\/strong>.<br \/>\nFacebook non \u00e8 nuova nel mondo dei progetti OpenSource e infatti il suo profilo GitHub \u00e8 pieno di repositories interessanti, primi su tutti la sua libreria per le animazioni POP (<a href=\"https:\/\/github.com\/facebook\/pop\" target=\"_blank\">facebook pop<\/a>) e il tool per la compilazione dei progetti Xcode da command line xctool (<a href=\"https:\/\/github.com\/facebook\/xctool\" target=\"_blank\">facebook xctool<\/a>).<\/p>\n<p>Un&#8217;aspetto poco conosciuto di <strong>LLDB<\/strong> (il nuovo debugger che ha sostituito GDB qualche tempo fa) \u00e8 che \u00e8 <em>scriptabile<\/em>, cio\u00e8 \u00e8 possibile scrivere degli script in python per aggiungervi nuove funzionalit\u00e0. Se avete voglia e tempo potete partire dalla <a href=\"http:\/\/lldb.llvm.org\/scripting.html\" target=\"_blank\">pagina ufficiale<\/a> e crearvi il vostro set di strumenti, oppure&#8230; potete usare chisel \ud83d\ude42<\/p>\n<p>L&#8217;installazione di chisel \u00e8 automatica a patto di aver instatto precedentemente <a href=\"http:\/\/brew.sh\" target=\"_blank\">hombrew<\/a> e se non l&#8217;avete fatto correte a farlo!<\/p>\n<p>Per installare <a href=\"https:\/\/github.com\/facebook\/chisel\" target=\"_blank\">chisel<\/a>, da riga di comando digitate:<\/p>\n<pre class=\"lang:sh decode:true \">brew update; brew install chisel<\/pre>\n<p>L&#8217;output di questo comando dovrebbe darvi informazioni sufficienti sul prossimo step da seguire, in ogni caso dovrete creare un file di testo nella vostra home con il nome di<\/p>\n<pre class=\"lang:sh decode:true \">.lldbinit<\/pre>\n<p>Questo file viene letto ed eseguito da LLDB al suo avvio, quindi digitiamo all&#8217;interno del file solo una riga per specificare il path dove trovare tutti gli script installati con chisel:<\/p>\n<pre class=\"lang:sh decode:true \">command script import \/usr\/local\/opt\/chisel\/libexec\/fblldb.py<\/pre>\n<p>La configurazione \u00e8 adesso terminata, ma chisel sar\u00e0 disponibile solo dal prossimo riavvio di xcode.<\/p>\n<h1>Qualche esempio di utilizzo<\/h1>\n<p>Abbiamo detto che chisel aggiunge funzionalit\u00e0 a LLDB, per provarlo vi consiglio di avviare un vostro progetto con un breakpoint all&#8217;interno di un metodo come <em>viewDidAppear:<\/em><br \/>\nUna volta interrotta l&#8217;escuzione del programma aprite la console e dovreste vedere il prompt di LLDB in attesa di un comando:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11045 size-full\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-01.png\" alt=\"Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-01\" width=\"1516\" height=\"158\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-01.png 1516w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-01-300x31.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-01-1024x106.png 1024w\" sizes=\"auto, (max-width: 1516px) 100vw, 1516px\" \/><\/a><\/p>\n<p>Per ottenere l&#8217;elenco completo dei comandi disponibili digitate:<\/p>\n<pre class=\"lang:sh decode:true \">help<\/pre>\n<p>dovreste vedere un lungo elenco di comandi predefiniti e in calce un elenco di &#8220;user-defined commands&#8221; che sono i comandi aggiunti da chisel.<br \/>\nPer avere maggiori informazioni su ciascun comando digitate<\/p>\n<pre class=\"lang:sh decode:true \">help nome_comando<\/pre>\n<p>Ad esempio questo \u00e8 l&#8217;output se digitate &#8220;help visualize&#8221;:<\/p>\n<pre class=\"lang:sh decode:true \">(lldb) help visualize \r\nOpen a UIImage, CGImageRef, UIView, or CALayer in Preview.app on your Mac.\r\nArguments:\r\n  ; Type: (id); The object to visualize.\r\nSyntax: visualize \r\n<\/pre>\n<p>Sembra interessante! proviamo a digitare:<\/p>\n<pre class=\"lang:sh decode:true \">visualize self.view<\/pre>\n<p>Come risultato vedremo la view del nostro viewcontroller (o qualsiasi altra view, CALayer etc) renderizzata in png e aperta con Anteprima \ud83d\ude2e<\/p>\n<p>Un&#8217;altro comando molto interessante \u00e8 <em>taplog<\/em>. Una volta digitato questo comando il programma riprender\u00e0 la sua normale esecuzione, per interrompersi nuovamente al prossimo tap sullo schermo e mostrando in console la view che \u00e8 stata tappata.<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11046 size-full\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-02.png\" alt=\"Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-02\" width=\"1600\" height=\"146\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-02.png 1600w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-02-300x27.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-02-1024x93.png 1024w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/a><\/p>\n<p>Tutti i comandi hanno uno scopo ben preciso e insieme costituiscono un vero coltellino svizzero, ci cono comandi per aggiungere\/rimuovere un bordo da una view (<em>border<\/em>\/<em>unborder<\/em>), comandi per visualizzare la gerarchia completa delle views (<em>pviews<\/em>) o dei viewcontroller (<em>pvc<\/em>):<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-03.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11047\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-03.png\" alt=\"Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-03\" width=\"1600\" height=\"396\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-03.png 1600w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-03-300x74.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/10\/Chisel-il-coltellino-svizzero-del-debug-iOS-e-OS-X-03-1024x253.png 1024w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/a><\/p>\n<p>Se la cosa vi ha stuzzicato la fantasia, chisel offre anche la possibilit\u00e0 di aggiungere nuovi comandi a LLDB in modo pi\u00f9 semplice rispetto a scrivervi uno script completo da zero, a tal proposito date un&#8217;occhiata alla documentazione ufficiale (<a href=\"https:\/\/github.com\/facebook\/chisel#custom-commands\" target=\"_blank\">docs<\/a>).<\/p>\n<p>Buona divertimento a tutti, alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chisel (scalpello) \u00e8 il nome di un progetto OpenSource rilasciato da Facebook utile durante il debug di&#8230;<\/p>\n","protected":false},"author":53,"featured_media":11050,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[30,481,7],"tags":[1402,708,800,1405,1403,1404],"class_list":["post-11043","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materiale-open-source","category-risorse-utili","category-strumenti-di-sviluppo","tag-debug-di-applicazioni-ios-e-os-x","tag-gdb","tag-librerie-ios","tag-lldb","tag-risorse-opensource-ios","tag-strumenti-di-sviluppo-ios"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11043"}],"version-history":[{"count":3,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11043\/revisions"}],"predecessor-version":[{"id":11049,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11043\/revisions\/11049"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11050"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}