断点条件出错

时间:2013-06-19 13:28:46

标签: ios objective-c xcode breakpoints lldb

我设置了条件的断点......

[event.name isEqualToString:@"Some Name"]

这很好用。

但是,当我尝试使用条件添加另一个断点时...

[part.name isEqualToString:@"Some Value With A Pound Sign £"]

我收到了错误......

Internal error [IRForTarget]: An Objective-C constant string's string initializer is not an array
Stopped due to an error evaluating condition of breakpoint

我需要逃脱英镑符号吗?

2 个答案:

答案 0 :(得分:11)

表达式解析器和包含非ASCII字符的NSString文字有一个错误。

(lldb) po @"u"
$9 = 0x00007fff7debe5e0 u
(lldb) po @"ü"
Internal error [IRForTarget]: An Objective-C constant string's string initializer is not an array
error: warning: expression result unused
error: The expression could not be prepared to run in the target

已向http://bugreport.apple.com/提交了有关此问题的错误报告。

正确处理非ASCII C字符串文字,因此可以解决此问题,例如

(lldb) po [NSString stringWithUTF8String:"ü"]
$11 = 0x000000010010b040 ü

答案 1 :(得分:1)

我不知道为什么断点仍然有这么有限的编译器支持,但无论如何,为了解决你的问题,你应该抛出你调用的每个方法的返回类型就好了:

(BOOL)[(NSString *)[part name] isEqualToString:@"some string"]

如果字符串不包含“£”符号或任何其他非ASCII字符,则代码应暂停。由于看起来LLDB编译器存在非ASCII字符问题,您可能希望首先使用该编码转换字符串。在这种情况下,我正在寻找一种方法来尽可能避免这种情况......