Precedente: , Su: Lista dei comandi di debug   [Contenuti][Indice]


14.3.6 Comandi vari del debugger

Ci sono alcuni altri comandi che non rientrano nelle precedenti categorie, come i seguenti:

dump [nome-file]

Riversa il byte code del programma nello standard output o nel file definito in nome-file. Questo stampa una rappresentazione delle istruzioni interne che gawk esegue per implementare i comandi awk in un programma. Ciò può essere molto istruttivo, come dimostra il seguente riversamento parziale del codice offuscato di Davide Brini (vedi la sezione E ora per qualcosa di completamente differente):

gawk> dump
-|        # BEGIN
-|
-| [  1:0xfcd340] Op_rule           : [in_rule = BEGIN] [source_file = brini.awk]
-| [  1:0xfcc240] Op_push_i         : "~" [MALLOC|STRING|STRCUR]
-| [  1:0xfcc2a0] Op_push_i         : "~" [MALLOC|STRING|STRCUR]
-| [  1:0xfcc280] Op_match          :
-| [  1:0xfcc1e0] Op_store_var      : O
-| [  1:0xfcc2e0] Op_push_i         : "==" [MALLOC|STRING|STRCUR]
-| [  1:0xfcc340] Op_push_i         : "==" [MALLOC|STRING|STRCUR]
-| [  1:0xfcc320] Op_equal          :
-| [  1:0xfcc200] Op_store_var      : o
-| [  1:0xfcc380] Op_push           : o
-| [  1:0xfcc360] Op_plus_i         : 0 [MALLOC|NUMCUR|NUMBER]
-| [  1:0xfcc220] Op_push_lhs       : o [do_reference = true]
-| [  1:0xfcc300] Op_assign_plus    :
-| [   :0xfcc2c0] Op_pop            :
-| [  1:0xfcc400] Op_push           : O
-| [  1:0xfcc420] Op_push_i         : "" [MALLOC|STRING|STRCUR]
-| [   :0xfcc4a0] Op_no_op          :
-| [  1:0xfcc480] Op_push           : O
-| [   :0xfcc4c0] Op_concat         : [expr_count = 3] [concat_flag = 0]
-| [  1:0xfcc3c0] Op_store_var      : x
-| [  1:0xfcc440] Op_push_lhs       : X [do_reference = true]
-| [  1:0xfcc3a0] Op_postincrement  :
-| [  1:0xfcc4e0] Op_push           : x
-| [  1:0xfcc540] Op_push           : o
-| [  1:0xfcc500] Op_plus           :
-| [  1:0xfcc580] Op_push           : o
-| [  1:0xfcc560] Op_plus           :
-| [  1:0xfcc460] Op_leq            :
-| [   :0xfcc5c0] Op_jmp_false      : [target_jmp = 0xfcc5e0]
-| [  1:0xfcc600] Op_push_i         : "%c" [MALLOC|STRING|STRCUR]
-| [   :0xfcc660] Op_no_op          :
-| [  1:0xfcc520] Op_assign_concat  : c
-| [   :0xfcc620] Op_jmp            : [target_jmp = 0xfcc440]
…
-| [     2:0xfcc5a0] Op_K_printf         : [expr_count = 17] [redir_type = ""]
-| [      :0xfcc140] Op_no_op            :
-| [      :0xfcc1c0] Op_atexit           :
-| [      :0xfcc640] Op_stop             :
-| [      :0xfcc180] Op_no_op            :
-| [      :0xfcd150] Op_after_beginfile  :
-| [      :0xfcc160] Op_no_op            :
-| [      :0xfcc1a0] Op_after_endfile    :
gawk>
exit

Esce dal debugger. Si veda la voce ‘quit’, più avanti in quest’elenco.

help
h

Stampa una lista di tutti i comandi del debugger di gawk con un breve sommario su come usarli. ‘help comando’ stampa l’informazione sul comando comando.

list [- | + | n | nome-file:n | nm | funzione]
l [- | + | n | nome-file:n | nm | funzione]

Stampa le righe specificate (per default 15) dal file sorgente corrente o il file chiamato nome-file. I possibili argomenti di list sono i seguenti:

- (Meno)

Stampa righe prima delle ultime righe stampate.

+

Stampa righe dopo le ultime righe stampate. list senza argomenti fa la stessa cosa.

n

Stampa righe centrate attorno alla riga numero n.

nm

Stampa righe dalla numero n alla numero m.

nome-file:n

Stampa righe centrate attorno alla riga numero n nel file sorgente nome-file. Questo comando può cambiare il file sorgente corrente.

funzione

Stampa righe centrate attorno all’inizio della funzione function. Questo comando può cambiare il file sorgente corrente.

quit
q

Esce dal debugger. Fare il debug è divertente, ma noi tutti a volte dobbiamo far fronte ad altri impegni nella vita, e talvolta troviamo il bug e possiamo tranquillamente passare a quello successivo! Come abbiamo visto prima, se si sta eseguendo un programma, il debugger avverte quando si batte ‘q’ o ‘quit’, in modo da essere sicuri di voler realmente abbandonare il debug.

trace [on | off]

Abilita o disabilita la stampa continua delle istruzioni che si stanno per eseguire, assieme alle righe di awk che implementano. L’impostazione di default è off.

È auspicabile che la maggior parte dei “codici operativi” (o “opcode”) in queste istruzioni siano sufficientemente autoesplicativi, e l’uso di stepi e nexti mentre trace è abilitato li renderà familiari.


Precedente: , Su: Lista dei comandi di debug   [Contenuti][Indice]