2015-04-23 10 views
5

NSRange jest po prostu strukturą C. Chcę utworzyć tymczasowy plik w lldb w Xcode w punkcie przerwania.Jak utworzyć i użyć temp NSRange w lldb?

szczególności do stosowania w metodzie NSArray objectAtIndex:inRange:

To nie działa.

(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 

Mój kod ma var NSRange nazwie badRange przy zerwaniu, a przechodząc że jeden na prace. Tak więc:

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

Co się dzieje?

Dzięki.

+0

Ktoś mówił o tym konkretnym błędzie na liście dyskusyjnej [LLVM] (http://llvm.1065342.n5.nabble.com/initialization-list-with-conversion-operator-dontwork-properly-and- report-error-td61466.html) w 2013 roku. Niestety odpowiedź brzmi "zrób błąd". – Jeff

+0

Zgłoszony błąd 20684329 na https://bugreport.apple.com – Jeff

+0

Wydaje się, że działa dobrze z Xcode 6.3.1. – Dalzhim

Odpowiedz

3

Tworzenie NSRange w debugerze działa dobrze podczas pracy w projekcie OS X, ale nie w przypadku projektów iOS. Powodem, dla którego nie działa on na iOS, jest to, że nawet jeśli Foundation dostarcza plik nagłówkowy, w którym deklarowana jest struktura, to nie ujawnia żadnego odpowiedniego symbolu. Zasadniczo, w systemie iOS NSRange jest tylko deklaracją forward i nie znam prawdziwego symbolu implementacji.

1

Potrzebowałem utworzyć NSRange ostatnio podczas próby debugowania niektórych kodu i natknąłem się na ten wątek. Obecnie jest to możliwe w przypadku projektów iOS korzystających z Xcode 8.3.2 z następującą składnią.

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

Działa to również:

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

Nie wiem, kiedy to została ustalona (lub jeśli kiedykolwiek był, jak opuszcza off (NSRange) na drugim przykładzie wyników w ten sam błąd), ale działa teraz.