2011-11-09 11 views
14

State guardando un video WWDC sulle nuove funzionalità di xCode 4. Hanno menzionato che è una buona idea utilizzare le azioni dei messaggi di registro sui punti di interruzione insieme a "continuare automaticamente dopo le azioni di valutazione" abilitato per generare il valore di una variabile per esempio invece di usare NSLogs tutto il tempo.come creare un'azione del messaggio di registro di un punto di interruzione in xcode?

Diciamo che ho una cosa del genere:

NSLog(@"URL is : %@", userDocumentsURL); 

Come faccio a scrivere un messaggio di log azioni per visualizzare il valore di userDocumentsURL? È davvero una buona idea usare il metodo sopra invece di NSLog?

risposta

25

Creare un'azione "Registra messaggio" punto di interruzione. Per il messaggio di log includere qualcosa di simile:

URL is @(char*) [[userDocumentsURL description] UTF8String]@ 

In alternativa è possibile creare un punto di interruzione azione 'Debugger comando' simile a:

po [NSString stringWithFormat:@"URL is: %@", userDocumentsURL] 

Io preferisco usare azioni breakpoint per la registrazione, in quanto è senza dubbio più facile da cancellare un sacco di punti di interruzione che rimuovere NSLogs. Un possibile svantaggio dell'uso dei breakpoint in questo modo è che sono significativamente più lenti (durante il debug) di un NSLog diretto.

+4

Vorrei sapere il motivo per cui una: il debugger è così stupido da richiedere il cast char * e b: non funziona la metà del tempo e c: la documentazione della mela non chiarisce che è necessario il char * e d: perché non si lamenta se le variabili non esistono per aiutarti a eseguire il debug. Confrontati con i punti di interruzione di Eclipse per Java che non hanno nemmeno questa funzione, quindi dovresti essere molto più povero, ma permetterti di modificarlo inserendo una stampa in una condizione. Questo è fastidioso di Eclipse, ma anche così è ancora molto più facile poiché la stampa non richiede alcuna fusione speciale e si fermerà e ti dirà sugli errori – Rhubarb

-3

Ho notato che la funzionalità di modifica dei punti di interruzione, sebbene utile e forse moderna, non si impegna al controllo del codice sorgente, quindi non si adatta a un team di sviluppatori. Per questo motivo, direi che quando si lavora su una squadra sotto il controllo del codice sorgente si deve rispettare la registrazione basata su codice come NSLog.

+4

Credo che lo faccia se selezioni le opzioni di condivisione corrette nell'editor breakpoint. Io non uso questa funzionalità da solo (sviluppatore solista), ma i discorsi del WWDC indicano che la condivisione si integra con il controllo del codice sorgente. – mbm29414

+12

Secondo me non essere obbligato a leggere tutte le uscite di debug degli altri membri del team è un professionista. Non è necessario pulire NSLog (o // prima del NSLog) prima di eseguire il commit. Ho lavorato in un team in cui 1 commit su 10 è stato "rimosso il log", "aggiunto altro NSLog", "modificato NSLog per essere più/meno prolisso" o qualsiasi altra cosa relativa alla registrazione. –

+0

Come @MatthiasBauch ha appena commentato potrebbe anche essere utile.E d'altro canto, dovresti sapere, ci sono alcuni casi in cui non vuoi riavviare l'app ma vuoi vedere un log nel debugger, quindi questa sarebbe l'unica possibilità per farlo. –

19

Ecco una soluzione simile utilizzando NSLog, che potrebbe essere un numero inferiore di caratteri rispetto alle altre soluzioni.

debugger command using NSlog

Tuttavia, a meno che non aggiungere il void in questo modo:

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

si otterrà un fastidioso "zero" stampato con il vostro log. per esempio:

(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 

Se si può vivere con il nulla (posso) è più veloce a digitare e più facile da ricordare solo il po

Problemi correlati