2013-06-19 70 views
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 

我需要逃避英鎊符號或東西?

+0

它不會創建錯誤,如果我刪除£...但它也不會暫停。 – Fogmeister

+0

嘗試使用'[part.name rangeOfString:@「一些有磅符號的值」]。location!= NSNotFound;'除非您專門查找英鎊符號,否則您必須使用不同的編碼查看字符串。 – Putz1103

+1

這看起來像LLDB中的錯誤(編碼問題),您應該將其報告給Apple。 –

回答

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

我不知道爲什麼有斷點仍如此有限的編譯器的支持,但無論如何,要解決你的問題,它應該是足夠的施展每個方法的返回類型,你這樣調用:

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

如果字符串不包含'£'符號或任何其他非ASCII字符,則此代碼應該暫停。由於看起來LLDB編譯器存在非ASCII字符問題,因此可能需要首先使用該編碼轉換字符串。同時,我正在尋找一種方法來儘可能地避免這種情況...

+0

如果「某些字符串」包含非ASCII字符,則會出現此問題。投射到'NSString *'在我的測試案例中沒有幫助。 –

+0

不,對我也沒有幫助。抱歉。 – Fogmeister

+0

噢,我注意到了。那麼,至少他的代碼應該暫停,當沒有非ASCII字符。讓我們試圖找到一個解決方案! –