tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Dettagli
Apple ha una pagina di domande e risposte tecniche : QA1669 - Come posso aggiungere informazioni di contesto - come il metodo corrente o il numero di riga - alle mie dichiarazioni di registrazione?
Per aiutare con la registrazione:
- Il preprocessore C fornisce alcune macro .
- Objective-C fornisce espressioni (metodi).
- Passa l' argomento implicito per il selettore del metodo corrente:
_cmd
Come indicato da altre risposte, per ottenere semplicemente il nome del metodo corrente, chiamare:
NSStringFromSelector(_cmd)
Per ottenere il nome del metodo corrente e il numero di riga corrente, utilizzare queste due macro __func__
e __LINE__
come mostrato qui:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Un altro esempio ... Snippet di codice che conservo nella libreria di snippet di codice di Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... e TRACE invece di ERRORE ...
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... e una più lunga usando una descrizione codificata che passa un valore ( [rows count]
) ...
NSLog( @"TRACE %@ METHOD %s:%d.", [NSString stringWithFormat:@"'Table of Contents.txt' file's count of Linefeed-delimited rows: %u.", [rows count]] , __func__, __LINE__ );
Macro del preprocessore per la registrazione
Si noti l'uso di una coppia di caratteri di sottolineatura attorno a entrambi i lati della macro.
| Macro | Formato | Descrizione
__func__% s Firma della funzione corrente
__LINE__% d Numero riga corrente
__FILE__% s Percorso completo del file di origine
__PRETTY_FUNCTION__% s Come __func__, ma include dettagli
digitare le informazioni nel codice C ++.
Espressioni per la registrazione
| Espressione | Formato | Descrizione
NSStringFromSelector (_cmd)% @ Nome del selettore corrente
NSStringFromClass ([self class])% @ Nome classe dell'oggetto corrente
[[NSString% @ Nome file codice sorgente
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray di traccia stack
Frame di registrazione
Alcuni framework di registrazione possono aiutare anche a ottenere il metodo corrente o il numero di riga. Non ne sono sicuro, poiché ho usato un ottimo framework di registrazione in Java ( SLF4J + LogBack ) ma non Cocoa.
Vedi questa domanda per i collegamenti a vari framework di registrazione Cocoa.
Nome del selettore
Se si dispone di una variabile Selector (un SEL ), è possibile stampare il nome del metodo ("messaggio") in uno dei due modi descritti da questo post del blog Codec :
- Utilizzando la chiamata Objective-C a NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Usando la C diritta:
NSLog(@"%s", selector );
Queste informazioni sono tratte dalla pagina dei documenti Apple collegata dal 19/07/2013. Quella pagina è stata aggiornata l'ultima volta il 2011-10-04.
iPhone
progetto, l'ho fatto manualmente. Mi piacerebbe vedere la risposta a questo.