2012-09-19 28 views
7

Estoy tratando de depurar mi programa Objective-C, y tengo que imprimir mi variable unsigned long long en hexadecimal. Estoy usando el depurador lldb.(lldb) Imprimir unsigned long long en hexadecimal

Para imprimir short como hexagonal, you can use this:

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

Sin embargo, no puedo hacer que funcione para 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 

Estoy ejecutando una aplicación de iOS en el simulador, si eso hace la diferencia.

Respuesta

7

tipo de complemento de formato espera el nombre del tipo como una sola palabra; necesita citar el argumento si se trata de varias palabras. p.ej.

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

Después de leer el resto de la document, descubrí que es posible hacer algo como esto:

// ObjC code 
typedef int A; 

entonces,

(lldb) type format add --format hex A 

Esto me dio la idea de typedef unsigned long long BigInt:

// ObjC code 
typedef unsigned long long BigInt; 

luego,

(lldb) type format add --format hex BigInt 

Funciona como un encanto.

24

Puede usar letras de formato. Enlace a documentos GDB (trabaja para LLDB también): 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

Tenga en cuenta que mientras que el BGF acepta un espacio entre 'p 'y'/x', LLDB no es así, por lo que 'p/x' trabaja en GDB, pero en lldb tiene que ser 'p/x'. –