156 votes

NSLog le nom de la méthode avec objective-C iPhone

Nous sommes actuellement à la définition de nous-mêmes une longue mécanisme de journal pour imprimer le nom de la classe et le numéro de ligne de source du journal.

#define NCLog(s, ...) NSLog(@"<%@:%d> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], \
    __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__])

Par exemple, quand je l'appelle NCLog(@"Bonjour le monde"); La sortie sera:

<ApplicationDelegate:10>Hello world

Maintenant, je veux aussi journal le nom de la méthode comme:

<ApplicationDelegate:applicationDidFinishLaunching:10>Hello world

Donc, ce serait faire notre débogage devenu plus facile quand on peut connaître la méthode qui est appelé. Je sais que nous avons aussi XCode débogueur, mais parfois, je veux aussi faire du débogage en se déconnectant.

267voto

drawnonward Points 35444
<pre><code></code><p>_cmd est le SEL dans n’importe quelle méthode Objective-C.</p></pre>

163voto

Dave DeLong Points 156978

Techniquement répondre à votre question, vous souhaitez :

Ou vous pouvez aussi le faire :

84voto

Basil Bourque Points 8938

Apple a une Technique Q&A page: QA1669 - Comment puis-je ajouter des informations de contexte - telles que la méthode actuelle ou de numéro de ligne - mes traces?

Pour aider à la journalisation:

  • Le préprocesseur C fournit quelques macros.
  • Objective-C fournit des expressions(méthodes).
    • Passer de l' implicite à l'argument de la méthode actuelle du sélecteur: _cmd

Comme d'autres réponses ont indiqué, pour simplement obtenir le courant de la méthode nom de, composez le:

NSStringFromSelector(_cmd)

Pour obtenir la méthode actuelle nom et numéro de ligne en cours, l'utilisation de ces deux macros __func__ et __LINE__ comme on le voit ici:

NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);

Un autre exemple... des Extraits de code, je l'ai garder dans Xcode l'Extrait de Code de la Bibliothèque:

NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );

...et TRACE au lieu de l'ERREUR...

NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );

...et un plus un à l'aide d'un chiffon doux codé de la description de passer une valeur ([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__ );

Les macros du préprocesseur pour l'enregistrement

Notez l'utilisation d'une paire de souligner les caractères sur les deux côtés de la macro.

| Macro | Format | Description
 __func__ %s de fonction en cours de signature
 _LIGNE ___ %d numéro de ligne en cours
 __FICHIER__ %s chemin d'accès Complet du fichier source
 __JOLI_FONCTION__ %s Comme __func__, mais comprend détaillé
 les informations de type de code C++. 

Expressions pour l'enregistrement

| Expression | Format | Description
 NSStringFromSelector(_cmd) %@ Nom de l'actuel sélecteur
 NSStringFromClass([auto]) %@ Actuelle de l'objet nom de la classe
 [[NSString %@ code Source de nom de fichier
 stringWithUTF8String:__FILE__] 
 lastPathComponent] 
 [NSThread callStackSymbols] %@ NSArray de trace de la pile

La Journalisation Des Cadres

L'abattage des cadres peut aider à obtenir méthode actuelle ou le numéro de la ligne ainsi. Je ne suis pas sûr, que j'ai utilisé un grand journalisation dans Java (SLF4J + LogBack), mais pas de Cacao.

Voir cette question pour des liens vers divers Cacao journalisation des cadres.

Nom de Sélecteur

Si vous avez un Sélecteur variable (un SEL), vous pouvez imprimer le nom de la méthode ("message") de deux manières, comme décrit par ce Codec post de blog:

  • En Objective-C appel à NSStringFromSelector:
    NSLog(@"%@", NSStringFromSelector(selector) );
  • L'utilisation de droite C:
    NSLog(@"%s", selector );

Cette information tirée de la liés Apple doc page de 2013-07-19. Cette page a été mise à jour en dernier 2011-10-04.

8voto

Huynh Inc Points 21
NSLog(@"%@", NSStringFromSelector(_cmd));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X