2012-09-19 25 views
7

Sto cercando di eseguire il debug del mio programma Objective-C, e ho bisogno di stampare la mia variabile unsigned long long in esadecimale. Sto usando il debugger lldb.(lldb) Stampa unsigned long long in hex

Per stampare short come esadecimale, you can use this:

(lldb) type format add --format hex short 
(lldb) print bit 
(short) $11 = 0x0000 

Tuttavia, non riesco a farlo funzionare per unsigned long long.

// failed attempts: 
(lldb) type format add --format hex (unsigned long long) 
(lldb) type format add --format hex unsigned long long 
(lldb) type format add --format hex unsigned decimal 
(lldb) type format add --format hex long long 
(lldb) type format add --format hex long 
(lldb) type format add --format hex int 

Sto eseguendo un'app per iOS sul simulatore, se questo fa alcuna differenza.

risposta

7

tipo di formato aggiungi si aspetta il nome del tipo come una singola parola - è necessario citare l'argomento se si tratta di più parole. per esempio.

2 { 
    3  unsigned long long a = 10; 
-> 4  a += 5; 
    5  return a; 
    6 } 
(lldb) type form add -f h "unsigned long long" 
(lldb) p a 
(unsigned long long) $0 = 0x000000000000000a 
(lldb) 
1

Dopo aver letto il resto del document, ho scoperto che è possibile fare qualcosa di simile:

// ObjC code 
typedef int A; 

poi,

(lldb) type format add --format hex A 

Questo mi ha dato l'idea di typedef unsigned long long BigInt:

// ObjC code 
typedef unsigned long long BigInt; 

quindi,

(lldb) type format add --format hex BigInt 

Funziona come un fascino.

24

È possibile utilizzare le lettere di formato. Link a documenti GDB (lavora per LLDB troppo): http://www.delorie.com/gnu/docs/gdb/gdb_55.html

(lldb) p a 
(unsigned long long) $0 = 10 
(lldb) p/x a 
(unsigned long long) $1 = 0x000000000000000a 
+2

Nota che, mentre gdb accetta uno spazio tra '' p' e/x', lldb non lo fa, in modo da 'p/x' lavora in gdb, ma in lldb deve essere 'p/x'. –

Problemi correlati