2009-04-12 10 views
17

Mam działanie punktu przerwania i używam opcji dziennika z listy rozwijanej. Chciałbym wydrukować wartość ciągu (podsumowania). Robię to:Jak wydrukować wartość ciągu z działania punktu przerwania w Xcode 4?

the person name is: @[email protected] 

ale wydrukuje adres pamięci. Mogę przełączyć się do opcji Polecenie debugowania i wykonać, ale tracę mój opis, jak użyto w pierwszej opcji. Korzystając z opcji Log, istnieje sposób na wydrukowanie wartości ciągu, a nie adresu pamięci?

Odpowiedz

17

Jest kilka rzeczy, które możesz zrobić. Dodaj funkcję rejestru z menu rozwijanego, a następnie dodaj kolejne pole i wybierz Debugger Command i wprowadź po f.name.

Jeśli chcesz, aby Twoje dziennika być bardziej skomplikowane, można zrobić coś więcej tak:

the person name is: @(const char *)[(NSString*)[p.name description] UTF8String]@ 

Ty najlepiej jest prawdopodobnie wystarczy użyć interfejs graficzny debugger do oglądania zmiennych. Jeśli chcesz logować wiadomości, użyj NSLog.

+1

w moim przypadku, XCode ignoruje cokolwiek pisać. Czy ważny jest typ debuggera (np. GDB/LLDB)? – futureelite7

+1

@ futureelite7 Oba GDB i LLDB powinny móc to zrobić. Możesz spróbować użyć akcji "Wyrażenie" zamiast "Log Message", a następnie "NSLog". Tak więc w oknie "Wyrażenie" wpisałeś coś takiego: '(void) NSLog (@" Log this variable:% @ ", aVariable);' –

+1

@JasonCoco wydaje się, że akcja Wyrażenie nie istnieje w Xcode 4.6. – Snowcrash

4

Skończyło się na użyciu 2 różnych działań dla tego samego punktu przerwania. Najpierw komenda Log, a następnie debugger z po varName. Jedynym minusem będzie drukowanie w 2 różnych wierszach.

enter image description here

+0

Możesz użyć jednego działania, jak Jason sugeruje – Philip007

26

Można użyć stwierdzenia NSLog z pułapki, używając programu "Debugger Command", ale trzeba dodać "expr"

expr (void)NSLog(@"The Person Name is %@", p.name) 

-

using expr command with a Debugger Command as breakpoint in Xcode 4.4

+1

To miało jestem trochę zdezorientowany, w twoim wyrażeniu używasz "zamiast" w cudzysłowach, wyglądają prawie identycznie w Xcode. Dla kogoś innego, podczas gdy był tam, podawał ten błąd "błąd: nieoczekiwany" @ "w programie '. – Mike

+0

Dzięki Mike, tego nie zauważyłem.To musiała zostać automatycznie zastąpiona podczas kopiowania/wklejania wyrażenie.Założono go – auco

7

Oto rozwiązanie wykorzystujące tylko jedną akcję i używające mniej znaków niż rozwiązanie expr.

debugger command using NSlog

Jednakże, chyba że dodasz void takiego:

po (void)NSLog(@"the person name is: %@", p.name) 

dostaniesz przykry "nil" wydrukowana ze swoim dzienniku. na przykład:

(lldb) po NSLog(@"foo") 
nil 
2013-06-19 14:42:59.025 TheMove[95864:c07] foo 

(lldb) po (void)NSLog(@"foo") 
2013-06-19 14:43:10.758 TheMove[95864:c07] foo 

Jeśli można żyć z zera (mogę) to szybciej wpisywać i łatwiejsze do zapamiętania tylko po

+0

Próbowałem wielokrotnie używać składni @ expr @ z bardzo małym sukcesem. naprawdę proste obejście, dzięki! – LunaCodeGirl