错误在断点状态

我已经设置了条件的断点…

[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 

我需要逃避英镑符号吗?

expression式parsing器和包含非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 Cstring文字处理正确,所以可以解决这个问题,例如

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

我不知道为什么断点仍然有这样一个有限的编译器支持,但无论如何,要解决你的问题,应该是足够的,就像你这样调用每个方法的返回types:

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

有了这个,你的代码应该暂停,如果string不包含'£'符号或任何其他非ASCII字符。 由于看起来LLDB编译器有非ASCII字符问题,您可能需要先使用该编码转换string。 在我正在寻找一种方法来避免这一点,如果可能的话…