7

我已经用条件设置了一个断点......

[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

我需要逃避英镑符号还是什么?

4

2 回答 2

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 ü
于 2013-06-22T07:02:37.993 回答
2

我不知道为什么断点仍然具有如此有限的编译器支持,但无论如何,要解决您的问题,将您调用的每个方法的返回类型转换为这样就足够了:

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

这样,如果字符串不包含“£”符号或任何其他非 ASCII 字符,您的代码应该暂停。看起来 LLDB 编译器存在非 ASCII 字符问题,您可能希望首先使用该编码转换字符串。与此同时,我正在寻找一种尽可能避免这种情况的方法……</p>

于 2013-06-19T14:07:53.800 回答