Как изменить формат отображения строк Unicode в окне отладки Xcodes? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть несколько typedef'd типов для хранения строк Unicode, UTF16, который определен как uint_least16_t, и UTF32, который определен как uint_least32_t (чтобы быть совместимым с определением стандарта char (16 | 32) _t)

В отладчике XCode строки UTF32 отображаются как

Я пробовал форматировщики LLDB, но они не совсем работают.

Вот последняя версия моего форматера UTF32: 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*) и (UTF32[]), а также без.

Я просто не уверен, что еще можно попробовать на этом этапе.

1 Ответ

0 голосов
/ 28 мая 2018

Обновление: Теперь мне сообщили, что OP хочет компилировать для C, а не C ++, и поэтому добавил соответствующий языковой тег к вопросу.

Типы в ответе ниже также доступны в C11 и далее, поэтому остальная часть этого ответа остается в силе.


Попробуйте изменить тип UTF16 на char16_t . Это работает для меня.

Для UTF32 будет работать char32_t или wchar_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, описан здесь (C) и здесь (C ++).

Чтобы ответить на вопрос, который вы задаете в комментариях, заголовочный файл не требуется. Это все встроенные типы. Если ваш компилятор возражает против этого, пожалуйста, проверьте версию C / C ++, которую вы используете в настройках сборки для вашего проекта в XCode.

...