2015-04-23 7 views
5

NSRange ist nur eine C-Struktur. Ich möchte ein temporäres in lldb in Xcode an einem Haltepunkt erstellen.Wie erstellt und verwendet Temp NSRange in lldb?

Speziell für den Einsatz in NSArray Methode objectAtIndex:inRange:

Dies funktioniert nicht.

(lldb) expr NSRange $tmpRange = (NSRange){0,4} 
(lldb) expr $tmpRange 
(NSRange) $tmpRange = location=0, length=4 
(lldb) expr -o -- [items indexOfObject:item4 inRange:$tmpRange] 
error: no matching constructor for initialization of 'NSRange' (aka '_NSRange') 
error: 1 errors parsing expression 

Mein Code hat eine NSRange var badRange an der Unterbrechungsstelle genannt, und nebenbei, dass man in den Werken. Also:

(lldb) expr -o -- [items indexOfObject:item4 inRange:badRange] 
0x7fffffffffffffff 
(lldb) expr badRange 
(NSRange) $1 = location=0, length=3 

Was ist los?

Danke.

+0

Jemand hat über diesen spezifischen Fehler auf der [LLVM-Mailingliste] gesprochen (http://llvm.1065342.n5.nabble.com/initialization-list-with-conversion-operator-dont-work-properly-and- report-error-td61466.html) im Jahr 2013. Leider scheint die Antwort "File a Bug" zu sein. – Jeff

+0

Eingereichter Fehler 20684329 unter https://bugreport.apple.com – Jeff

+0

Es scheint mit Xcode 6.3.1 gut zu funktionieren. – Dalzhim

Antwort

3

Das Erstellen eines NSRange im Debugger funktioniert problemlos, wenn Sie in einem OS X-Projekt arbeiten, aber nicht für iOS-Projekte. Der Grund, warum es unter iOS nicht funktioniert, ist, dass Foundation zwar die Header-Datei bereitstellt, in der die Struktur deklariert ist, aber kein entsprechendes Symbol. Unter iOS ist NSRange im Grunde nur eine Forward-Deklaration und ich kenne das echte Symbol für die Implementierung nicht.

1

Ich musste vor kurzem einen NSRange erstellen, während ich versuchte, etwas Code zu debuggen, und stieß auf diesen Thread. Derzeit ist dies für iOS-Projekte mit Xcode 8.3.2 mit der folgenden Syntax möglich.

po [@"test words here" stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:1024 range:(NSRange){0,15}] 

Dies funktioniert auch:

expr NSRange $tmpRange = (NSRange){0,15} 
po [@"test words here" stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:1024 range:(NSRange)$tmpRange] 

Nicht sicher, wenn dieses Problem behoben wurde (oder wenn es jemals war, wie das Weglassen (NSRange) auf dem zweiten Beispiel ergibt die gleichen Fehler), aber es funktioniert jetzt.