Utilizzare il comando "espressione" nel debugger. Usarlo è relativamente semplice. Basta digitare l'espressione del comando e premere Invio. Ti verrà quindi richiesto di inserire un'espressione. Ecco un esempio
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
2+2
(int) $2 = 4
Ho anche allegato le informazioni di aiuto per il comando di espressione di seguito. Spero che questo ti aiuti.
Valutare un'espressione C/ObjC/C++ nel contesto del programma corrente, utilizzando le variabili e le variabili definite dall'utente attualmente in ambito. Questo comando richiede l'input 'raw' (non è necessario citare materiale).
Sintassi: espressione -
Opzioni di comando Uso: espressione [-f] [-G] [-a] [-d] [-t] [-u] - espressione [-o ] [-a] [-d] [-t] [-u] - espressione
-G <gdb-format> (--gdb-format <gdb-format>)
Specify a format using a GDB format specifier string.
-a <boolean> (--all-threads <boolean>)
Should we run all threads if the execution doesn't complete on one
thread.
-d <boolean> (--dynamic-value <boolean>)
Upcast the value resulting from the expression to its dynamic type
if available.
-f <format> (--format <format>)
Specify a format to be used for display.
-o (--object-description)
Print the object description of the value resulting from the
expression.
-t <unsigned-integer> (--timeout <unsigned-integer>)
Timeout value for running the expression.
-u <boolean> (--unwind-on-error <boolean>)
Clean up program state if the expression causes a crash, breakpoint
hit or signal.
Timeout: Se l'espressione può essere valutata in modo statico (senza runnning codice) allora sarà. Altrimenti, per impostazione predefinita l'espressione verrà eseguita sul thread corrente con un breve timeout: attualmente .25 secondi. Se non ritorna in quel momento, la valutazione verrà interrotta e riprende con tutti i thread in esecuzione. È possibile utilizzare l'opzione -a per disabilitare il nuovo tentativo su tutti i thread . È possibile utilizzare l'opzione -t per impostare un timeout più breve.
Variabili definite dall'utente: È possibile definire le proprie variabili per comodità o da utilizzare nelle espressioni successive. Li definisci nello stesso modo in cui definiresti le variabili in C. Se il primo carattere di la variabile definita dall'utente è un $, il valore della variabile sarà disponibile nelle future espressioni , altrimenti sarà disponibile solo nell'espressione corrente .
Esempi:
expr my_struct->a = my_array[3]
expr -f bin -- (index * 8) + 5
expr unsigned int $foo = 5
expr char c[] = "foo"; c[0]
NOTA IMPORTANTE: Poiché questo comando riceve l'input 'crudo', se si utilizzano opzioni di comando è necessario utilizzare '-' tra la fine delle opzioni di comando e l'inizio dell'input grezzo.
fonte
2013-03-05 19:19:57
Che cos'è "po"? La console gdb ti permetterà di valutare un ampio set di funzioni arbitrarie. Cosa in particolare dove stai cercando di fare? –
"po" è oggetto di stampa. È l'estensione di Apple a gcc che comporta l'invio del messaggio * description * a un'istanza ObjC in modo che restituisca la sua descrizione. – diciu
Ah, ecco perché non ne ho sentito parlare. Divertimento. –