(lldb) Печатать unsigned long long в шестнадцатеричном формате

Я пытаюсь отлаживать свою программу на Objective-C, и мне нужно напечатать переменную unsigned long long в шестнадцатеричном формате. Я использую отладчик lldb.

Чтобы напечатать short в шестнадцатеричном формате, вы можете использовать это:

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

Однако я не могу заставить его работать на 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

Я запускаю приложение iOS на симуляторе, если это имеет значение.


person Mazyod    schedule 19.09.2012    source источник


Ответы (3)


type format add ожидает, что имя типа будет состоять из одного слова — вам нужно заключить аргумент в кавычки, если он состоит из нескольких слов. например

   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) 
person Jason Molenda    schedule 23.09.2012

Вы можете использовать форматные буквы. Ссылка на документы GDB (работает и для LLDB): https://sourceware.org/gdb/current/onlinedocs/gdb/Output-Formats.html#Output-Formats

(lldb) p a
(unsigned long long) $0 = 10
(lldb) p/x a
(unsigned long long) $1 = 0x000000000000000a
person Vlad    schedule 05.03.2015
comment
Обратите внимание, что в то время как gdb принимает пробел между p и /x, lldb его не допускает, поэтому p /x работает в gdb, но в lldb он должен быть p/x. - person Paul R; 14.02.2017
comment
@ Влад, можешь указать более конкретную ссылку на все команды? - person Developer Sheldon; 16.06.2019
comment
@DeveloperSheldon Похоже, срок действия ссылки истек. Я отредактировал свой ответ, так что теперь он содержит рабочую ссылку на все выходные форматы GDB. Пожалуйста, проверь это. - person Vlad; 29.06.2019

Прочитав остальную часть документа, я обнаружил, что можно сделать что-то вроде этого:

// ObjC code
typedef int A;

тогда,

(lldb) type format add --format hex A

Это навело меня на мысль typedef unsigned long long BigInt :

// ObjC code
typedef unsigned long long BigInt;

тогда,

(lldb) type format add --format hex BigInt

Работает как шарм.

person Mazyod    schedule 19.09.2012