1

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

LLDB 的两次调用,一次读取 <code>po @

它为什么声称An Objective-C constant string's string initializer is not an array似乎它试图将我的@"" NSString文字糖转换为NSString带有 C 字符串的初始化程序是不成功的,但为什么呢?

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

4

2 回答 2

2

这看起来像一个错误。请通过http://bugreporter.apple.com归档。

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

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

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

于 2016-01-29T19:50:40.543 回答
1

一定是 LLDB 表达式解析器的错误。即使调试器也有错误..

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

于 2016-01-29T17:39:49.050 回答