如何在Xcodes调试窗口中更改unicode字符串的显示格式?

时间:2018-05-14 22:25:48

标签: c xcode unicode clang lldb

我有一些typedef类型用于保存unicode字符串,UTF16定义为uint_least16_tUTF32定义为{{1} (与char(16 | 32)_t)

的标准定义兼容

在Xcode的调试器中,显示UTF32字符串as

我已尝试过LLDB的格式化程序,但他们并没有完全正常工作。

这是我的UTF32格式化程序的最新版本:uint_least32_t

我尝试过的其他事情:

type format add -f unicode32 -C yes UTF32

type format add -f unicode32s -C yes UTF32

type format add -f unicode32[] -C yes UTF32

以及type format add -f unicode32* -C yes UTF32(UTF32*)以及没有{。}}的所有人。

我还不确定此时还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

更新:我现在已被告知OP想要为C而不是C ++编译,因此在问题中添加了相应的语言标记。

以下答案中的类型也可在C11以后版本中提供,因此本答复的其余部分仍适用。

尝试将您的UTF16 typedef更改为char16_t。这对我有用。

对于UTF32,char32_twchar_t都可以使用。

请注意,从字符串文字中分配变量时,字符串文字的类型必须匹配,如此(此代码需要C11 / C ++ 11或更高版本):

int main ()
{
    const char16_t *s1 = u"s1 is char16_t";
    const char32_t *s2 = U"s2 is char32_t";
    const wchar_t *s3 = L"s3 is wchar_t";
    return 0;
}

当我在return语句中放置一个断点并在控制台中打印这些变量时,我得到了这个:

(lldb) p s1
(const char16_t *) $0 = 0x0000000100000f44 u"s1 is char16_t"
(lldb) p s2
(const char32_t *) $1 = 0x0000000100000f58 U"s2 is char32_t"
(lldb) p s3
(const wchar_t *) $2 = 0x0000000100000f7c L"s3 is wchar_t"
(lldb) 

您也可以将鼠标悬停在它们上面或“本地人”中看到它们。窗口。

C11 / C ++ 11中提供的全部字符串文字描述为here(C)和here(C ++)。

要回答您在评论中提出的问题,不需要头文件。这些都是内置类型。如果您的编译器反对这些,请在Xcode的项目的构建设置中检查您正在使用的C / C ++版本。