Je fais une présentation sur le débogage dans Xcode et je voudrais obtenir plus d'informations sur l'utilisation efficace de NSLog.
En particulier, j'ai deux questions:
- existe-t-il un moyen de NSLog facilement le nom / numéro de ligne de la méthode actuelle?
- existe-t-il un moyen de "désactiver" tous les NSLogs facilement avant de compiler le code de version?
Réponses:
Voici quelques macros utiles autour de NSLog que j'utilise beaucoup:
La macro DLog est utilisée pour sortir uniquement lorsque la variable DEBUG est définie (-DDEBUG dans les indicateurs C du projet pour la configuration du débogage).
ALog affichera toujours du texte (comme le NSLog standard).
La sortie (par exemple ALog (@ "Hello world")) ressemblera à ceci:
la source
(@"%s [Line %d] " fmt)
lefmt
soit ajouté à la chaîne de contrôle? Je n'ai pas vu cette syntaxe autre que cette macro de débogage.J'ai pris
DLog
etALog
d'en haut, et ajoutéULog
ce qui soulève unUIAlertView
message.Résumer:
DLog
affichera commeNSLog
uniquement lorsque la variable DEBUG est définieALog
affichera toujours commeNSLog
ULog
affichera leUIAlertView
seul lorsque la variable DEBUG est définieVoici à quoi ça ressemble:
+1 Diederik
la source
DLog
déclaration. Ceci est utile car si vous l'avez fait, dans les versions, la versionDLog
est compilée pour rien, et il vous resterait un point-virgule pendant dans votre code. Ce n'est pas une erreur, mais cela peut générer un avertissement, selon vos paramètres, s'il suit un autre point-virgule.Affiche le nom du fichier, le numéro de ligne et le nom de la fonction:
__FUNCTION__
en C ++ montre le nom déformé__PRETTY_FUNCTION__
montre le joli nom de la fonction, en cacao ils se ressemblent.Je ne sais pas quelle est la bonne façon de désactiver NSLog, j'ai fait:
Et aucune sortie de journalisation n'est apparue, mais je ne sais pas si cela a des effets secondaires.
la source
Voici une grande collection de constantes de débogage que nous utilisons. Prendre plaisir.
la source
Il y a une nouvelle astuce qu'aucune réponse ne donne. Vous pouvez utiliser à la
printf
placeNSLog
. Cela vous donnera un journal propre:Avec
NSLog
vous obtenez des choses comme ça:Mais avec
printf
vous obtenez seulement:Utilisez ce code
la source
Ma réponse à cette question pourrait aider, elle ressemble à celle que Diederik a concoctée. Vous pouvez également remplacer l'appel à
NSLog()
une instance statique de votre propre classe de journalisation personnalisée, de cette façon, vous pouvez ajouter un indicateur de priorité pour les messages de débogage / avertissement / erreur, envoyer des messages à un fichier ou une base de données ainsi qu'à la console, ou à peu près tout ce que vous pouvez penser.la source
%s
spécificateur de format qu'Apple essaie de déprécier et a évité l'-Wcstring-format-directive
avertissement Clang nouvellement introduit en 2015.Désactiver tous les NSLogs, pour une personne allergique à MACROS, voici quelque chose que vous pouvez également compiler:
Et utilisez-le presque comme NSLog:
Depuis ce blog: https://whackylabs.com/logging/ios/2011/01/19/ios-moving-in-and-out-of-nslogs/
la source
Pour compléter les réponses ci-dessus, il peut être très utile d'utiliser un remplacement pour NSLog dans certaines situations, en particulier lors du débogage. Par exemple, se débarrasser de toutes les informations de date et de nom / id de processus sur chaque ligne peut rendre la sortie plus lisible et plus rapide à démarrer.
Le lien suivant fournit un certain nombre de munitions utiles pour rendre la journalisation simple beaucoup plus agréable.
http://cocoaheads.byu.edu/wiki/a-different-nslog
la source
Il est facile de modifier vos NSLogs existants pour afficher le numéro de ligne et la classe à partir desquels ils sont appelés. Ajoutez une ligne de code à votre fichier de préfixe:
la source
C'est simple, par exemple
Sortie: - [AppDelegate applicationWillEnterForeground:]
la source
en s'appuyant sur les réponses ci-dessus, voici ce que j'ai plagié et trouvé. Ajout de la journalisation de la mémoire.
la source
Nouvel ajout à DLog. Au lieu de supprimer totalement le débogage de l'application publiée, désactivez-la uniquement. Lorsque l'utilisateur a des problèmes, qui nécessiteraient un débogage, dites simplement comment activer le débogage dans une application publiée et demander les données du journal par e-mail.
Version courte: créez une variable globale (oui, solution paresseuse et simple) et modifiez DLog comme ceci:
Réponse plus longue à Jomnius iLessons iLearned: comment effectuer une journalisation de débogage dynamique dans une application publiée
la source
Depuis quelque temps, j'utilise un site de macros adopté à partir de plusieurs ci-dessus. Mine se concentre sur la journalisation dans la console, en mettant l'accent sur la verbosité contrôlée et filtrée ; si cela ne vous dérange pas beaucoup de lignes de journal mais que vous souhaitez facilement activer et désactiver des lots, alors vous pourriez trouver cela utile.
Tout d'abord, je remplace éventuellement NSLog par printf comme décrit par @Rodrigo ci-dessus
Ensuite, j'active ou désactive la connexion.
Dans le bloc principal, définissez différentes catégories correspondant aux modules de votre application. Définissez également un niveau de journalisation au- dessus duquel les appels de journalisation ne seront pas appelés. Ensuite , définir différentes saveurs de sortie NSLog
Ainsi, avec les paramètres actuels de kLOGIFcategory et kLOGIFdetailLTEQ, un appel comme
imprimera mais ce ne sera pas
ni
Si vous souhaitez remplacer les paramètres d'un appel de journal individuel, utilisez un niveau négatif:
Je trouve que les quelques caractères supplémentaires de chaque ligne valent autant que je peux
Je suis sûr que beaucoup trouveront cela un peu exagéré, mais juste au cas où quelqu'un le trouverait adapté à leurs besoins ..
la source