【问题标题】:Why can't I use the LLDB to print out a string literal with a ¢ character?为什么我不能使用 LLDB 打印出带有 ¢ 字符的字符串文字?
【发布时间】:2016-01-29 16:10:38
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这里需要注意的是 NSString 构造函数返回自动释放的对象,所以如果你想将此字符串分配给程序中的某个指针,你需要在将它传递回 ARC 世界之前保留它否则它会被释放并变坏。但是,如果您只是在 lldb 的表达式中使用它,则没有必要。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2015-08-26
      • 2014-02-21
      相关资源
      最近更新 更多