Activer et Désactiver NSLog en mode DEBUG
Je veux l'activer NSLog quand je suis en debug et désactiver le contraire. Une chose très simple est:
#ifdef DEBUG
NSLog(@"My log");
#endif
Mais tout cela #ifdef
et #endif
est borring... 🙁 j'ai Donc essayer autre chose: (.pch est le bon endroit pour le mettre)
#ifdef DEBUG
# define NSLog(text) NSLog(text);
#else
# define NSLog(text)
#endif
Ce travail très fin (n'est pas récursif). Mais le problème est que NSLog ont infinie arguments.
void NSLog(NSString *format, ...)
Comment je résoudre ce de travailler dans de préprocesseur mode?
-- Edit --
Ce code de rendre votre NSLog mieux:
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(...)
#endif
- +1 pour la Question Sympa. Complet d'un composant réutilisable sur ce sujet, au mobile.tutsplus.com/tutorials/iphone/...
- J'ai suivi le guide dans le lien. Mais j'ai eu l'erreur de compilation suivante: les symboles non définis pour l'architecture x86_64: ld: symbole(s) ne se trouvent pas pour l'architecture x86_64 clang: erreur: échec de la commande de l'éditeur de liens avec le code de sortie 1 (l'option-v pour voir invocation) s'il vous Plaît aider @MahbuburRAaman
- Erreur les symboles non définis pour l'architecture x86_64: ld: symbole(s) ne se trouvent pas pour l'architecture x86_64 apparaît pour plusieurs raisons. Par exemple, pour la bibliothèque manquante ou dans d'autres cas, avoir un oeil à ce qui suit AFIN que les ressources stackoverflow.com/questions/18408531/..., stackoverflow.com/questions/11996227/... , stackoverflow.com/questions/6231368/....
- Merci pour la réponse. J'ai trouvé la raison est que je vais appeler cette coutume NSLog méthode à partir d'un objectif de fichier c++.
- S'il vous plaît, où ai-je placer ce code?
Vous devez vous connecter pour publier un commentaire.
Cela devrait faire l'affaire:
C'est un peu plus court et désactive également NSLog lors de l'utilisation d'un appareil. Si vous écrivez un jeu, NSLogs envoyé souvent peut réduire votre FPS de 60 à 20.
Toutes les réponses ci-dessus sont correctes. Je peux vous suggérer de le faire d'une manière suivante aussi. Supposons que j'ai un si sans crochets
Ce qui va se passer si il remplacera NSLog avec aucune déclaration. Donc on peut simplement remplacer par un vide de la boucle.
Cette déclaration va lancer un vide boucle une fois. Cela permettra de retirer votre NSLog de la totalité de votre code en direct.
if
déclarations sans crochets est probablement une mauvaise idée en premier lieu.if (x==5) ;
ce qui est bien.Ensemble de Débogage à 1 pour activer le journal et 0 pour le désactiver.
Voici une belle affaire...
ajoutez à tout .m
Remplacer tout
avec
Dans cet exemple, j'ai créé un NSUser clés et de définir BOOL OUI, utiliser une forme d'interrupteur etc pour modifier la clé de PAS de ou de supprimer complètement si vous ne voulez pas afficher les EXTRANSLog via la console de débogage.
Je l'utiliser lors de la résolution et qui ne veulent pas excessif journaux à apparaître.
Seulement quand SomeFancyKey == OUI.
C'est le même que
où 1 est OUI montrent NSLog, et 0 est NON.