为什么我不能使用LLDB打印带有¢字符的字符串文字?

时间:2016-01-29 16:10:39

标签: objective-c nsstring runtime-error lldb parsing-error

在XCTest(以及后来正常运行期间)的断点处,我遇到了一些......奇怪的事情。我认为下面的截图解释了我的问题:

Two calls of the LLDB, one reading <code>po @"12"</code>, with the successful print below reading <code>12</code>. The next is <code>po @"\u0031\u0032"</code> and also prints <code>12</code>. The next reads <code>po @"12¢"</code>, with an error below saying "An Objective-C constant string's string initializer is not an array". The third reads <code>po @"\u0031\u0032\u00A2"</code>, the fourth reads <code>po @"¢"</code>, and the fifth <code>po @"\u00A2"</code> and all have the same issue.

为什么声明An Objective-C constant string's string initializer is not an array看起来它似乎试图将我的@"" NSString字面糖翻译成NSString初始化程序 - with-C-string不成功,但为什么?

另外,我已经使用¢字符或其Unicode转义序列测试了许多其他字符串,它们都具有相同的结果。

2 个答案:

答案 0 :(得分:2)

这看起来像个错误。请用http://bugreporter.apple.com提交。

静态字符串构造涉及一些编译器魔法,显然lldb在字符串包含高位字符时没有正确。您可以使用NSString构造函数之一在表达式解析器中实现相同的效果:

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

然后你可以在将来的表达式中使用$ newstr。

答案 1 :(得分:1)

必须是LLDB表达式解析器的错误。甚至调试器都有错误..

您可以查看llvm IRForTarget使用的ClangExpressionParser中的错误。