Почему я не могу использовать LLDB для печати строкового литерала с символом ¢?

Находясь в точке останова во время XCTest (и позже во время обычного запуска), я столкнулся с чем-то... странным. Я думаю, что скриншот ниже объясняет мою проблему:

Два вызова LLDB, один из которых читается как <code>An Objective-C constant string's string initializer is not an array</code> <strong>?</strong> Похоже, что его попытка перевести мой <code>@NSString буквальный сахар в NSString Initializer-with-C-string не удалось, но почему?

Кроме того, я протестировал много других строк с ¢ символ или его escape-последовательность Unicode, и все они имеют одинаковый результат.

2 ответа

Решение

Это похоже на ошибку. Пожалуйста, отправьте его на http://bugreporter.apple.com/.

Построение статической строки включает в себя некоторую магию компилятора, и, очевидно, lldb не понимает этого правильно, когда строка содержит старшие символы. Вы можете достичь того же эффекта в анализаторе выражений, используя один из конструкторов NSString:

(lldb) expr NSString *$newstr = [NSString stringWithUTF8String: "Something¢"]
(lldb) expr $newstr
(__NSCFString *) $newstr = 0x00000001007000a0 @"Something¢"

Затем вы можете использовать $newstr в будущих выражениях.

Должно быть ошибка в парсере выражений LLDB. Даже отладчики имеют ошибки..

Вы можете найти ошибку в IRForTarget, которая используется llvm ClangExpressionParser.

Другие вопросы по тегам