16

我正在尝试调试我的 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 应用程序,如果这有什么不同的话。

4

3 回答 3

41

您可以使用格式字母。链接到 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
于 2015-03-05T08:43:40.700 回答
12

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) 
于 2012-09-23T10:35:00.407 回答
1

在阅读了文档的其余部分后,我发现可以执行以下操作:

// 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

奇迹般有效。

于 2012-09-19T09:11:22.773 回答