Per venire a capo di situazioni intricate è spesso utile tracciare l'esecuzione del programma per individuare il punto esatto dove il comportamento effettivo si discosta da quello atteso. Ruby offre diversi strumenti per ricavare informazioni utili sull'esecuzione del programma. Iniziamo col vedere alcuni semplici strumenti che permettono di tracciare il programma permettendo di capire quale riga di codice si sta eseguendo.
Per individuare semplicemente il nome del file e il numero della linea di codice basta usare le keyword __FILE__ e __LINE__ che forniscono il nome del file e la posizione. Un utile impiego di queste keyword è nell'output di messaggi di debug, ad esempio se volessimo aggiungere alle nostre applicazioni un livello di debug possiamo fornire in output anche il nome del file e la riga:
if $DEBUG
puts "[DEBUG] Some useful messages at Line #{__LINE__} in #{__FILE__}"
end
Uno strumento molto più potente è fornito attraverso la costante SCRIPT_LINES__ che se opportunamente inizializzata conterrà tutte le righe dei file inclusi nel programma. Per includere i file caricati con require e load basta inizializzare la costante SCRIPT_LINES__ come un hash:
SCRIPT_LINES__ = {}
Dopodiché ogni file caricato andrà a popolare l'hash. Ad esempio un semplice
require 'open-uri'
causerà l'inserimento nell'hash di tutti i file di cui viene fatto il parsing che saranno anche le chiavi di SCRIPT_LINES__:
>> puts SCRIPT_LINES__.keys /usr/lib/ruby/1.8/parsedate.rb /usr/lib/ruby/1.8/uri/http.rb /usr/lib/ruby/1.8/uri/mailto.rb /usr/lib/ruby/1.8/uri/ldap.rb /usr/lib/ruby/1.8/uri/https.rb /usr/lib/ruby/1.8/open-uri.rb /usr/lib/ruby/1.8/rational.rb /usr/lib/ruby/1.8/date/format.rb /usr/lib/ruby/1.8/uri/common.rb /usr/lib/ruby/1.8/uri.rb /usr/lib/ruby/1.8/uri/ftp.rb /usr/lib/ruby/1.8/uri/generic.rb /usr/lib/ruby/1.8/time.rb
I valori dell'hash saranno degli array di stringhe contenenti il codice sorgente di ogni file. Se si vuole invece includere anche il file sorgente occorre inserirlo riga per riga nell'hash, ad esempio inizializzandolo in questo modo:
SCRIPT_LINES__ = {__FILE__ => File.readlines(__FILE__)}
Per accedere poi alla linea voluta basta accedere al valore desiderato dell'hash indicando il nome del file e la riga. Ad esempio
SCRIPT_LINES__['/usr/lib/ruby/1.8/uri.rb'][1]
produrrà in output la seconda linea del file uri.rb.
Questa costante viene utilizzata principalmente nella costruzione di strumenti di debugging e di coverage ma in alcuni casi è utile anche nelle normali applicazioni.
Ogni mercoledì, direttamente nella tua e-mail: articoli, guide e tutorial su Ruby e Ruby on Rails .
Iscriviti alla newsletter
|
Nessun corso previsto |
|
|
Corso Amministratore Linux15 Febbraio 2010 a Roma |