Estoy haciendo una presentación sobre depuración en Xcode y me gustaría obtener más información sobre el uso eficiente de NSLog.
En particular, tengo dos preguntas:
- ¿hay alguna manera de NSLog fácilmente el nombre / número de línea del método actual?
- ¿Hay alguna manera de "deshabilitar" todos los NSLogs fácilmente antes de compilar el código de lanzamiento?
objective-c
cocoa
cocoa-touch
xcode
nslog
rienda
fuente
fuente
Respuestas:
Aquí hay algunas macros útiles sobre NSLog que uso mucho:
La macro DLog se usa solo para generar salida cuando se establece la variable DEBUG (-DDEBUG en los indicadores C de los proyectos para la confirmación de depuración).
ALog siempre generará texto (como el NSLog normal).
La salida (por ejemplo, ALog (@ "Hello world")) se verá así:
fuente
(@"%s [Line %d] " fmt)
causafmt
que se agregue a la cadena de control? No he visto esta sintaxis más que esta macro de depuración.Tomé
DLog
yALog
desde arriba, y agregué loULog
que genera unUIAlertView
mensaje.Para resumir:
DLog
saldrá comoNSLog
solo cuando se establece la variable DEBUGALog
siempre saldrá comoNSLog
ULog
mostrará elUIAlertView
único cuando se establece la variable DEBUGEsto es lo que parece:
+1 Diederik
fuente
DLog
declaración. Esto es útil porque si lo hiciera, en las versiones de lanzamiento,DLog
se compila a nada, y se quedaría con un punto y coma colgando en su código. Esto no es un error, pero podría generar una advertencia, dependiendo de su configuración, si sigue a otro punto y coma.Nombre de archivo de salida, número de línea y nombre de función:
__FUNCTION__
en C ++ muestra el nombre destrozado__PRETTY_FUNCTION__
muestra un buen nombre de función, en cacao se ven iguales.No estoy seguro de cuál es la forma correcta de deshabilitar NSLog, lo hice:
Y no apareció ninguna salida de registro, sin embargo, no sé si esto tiene algún efecto secundario.
fuente
Aquí una gran colección de constantes de depuración que utilizamos. Disfrutar.
fuente
Hay un nuevo truco que ninguna respuesta da. Puedes usar
printf
en su lugarNSLog
. Esto le dará un registro limpio:Con
NSLog
usted obtienes cosas como esta:Pero con
printf
usted solo obtiene:Usa este código
fuente
Mi respuesta a esta pregunta podría ayudar, parece que es similar a la que Diederik preparó. También es posible que desee reemplazar la llamada
NSLog()
con una instancia estática de su propia clase de registro personalizada, de esa manera puede agregar una marca de prioridad para mensajes de depuración / advertencia / error, enviar mensajes a un archivo o base de datos, así como a la consola, o prácticamente cualquier otra cosa que se te ocurra.fuente
%s
especificador de formato que Apple está tratando de desaprobar y evitó la-Wcstring-format-directive
advertencia de Clang recientemente presentada en 2015.Desactivando todos los NSLogs, para alguien alérgico a MACROS, aquí hay algo que también puede compilar:
Y, úsalo casi como NSLog:
Desde este blog: https://whackylabs.com/logging/ios/2011/01/19/ios-moving-in-and-out-of-nslogs/
fuente
Para complementar las respuestas anteriores, puede ser bastante útil usar un reemplazo para NSLog en ciertas situaciones, especialmente al depurar. Por ejemplo, deshacerse de toda la información de fecha / nombre de proceso / id en cada línea puede hacer que la salida sea más legible y más rápida de iniciar.
El siguiente enlace proporciona bastante munición útil para hacer que el registro simple sea mucho más agradable.
http://cocoaheads.byu.edu/wiki/a-different-nslog
fuente
Es fácil cambiar sus NSLogs existentes para mostrar el número de línea y la clase desde la que se llaman. Agregue una línea de código a su archivo de prefijo:
fuente
Es simple, por ejemplo
Salida: - [AppDelegate applicationWillEnterForeground:]
fuente
Sobre la base de las respuestas anteriores, esto es lo que plagiado y se me ocurrió. También se agregó el registro de memoria.
fuente
Nueva incorporación a DLog. En lugar de eliminar totalmente la depuración de la aplicación lanzada, solo desactívela. Cuando el usuario tiene problemas, lo que requeriría una depuración, solo diga cómo habilitar la depuración en la aplicación lanzada y solicite los datos de registro por correo electrónico.
Versión corta: cree una variable global (sí, una solución perezosa y simple) y modifique DLog de esta manera:
Respuesta más larga en Jomnius iLessons iLearned: Cómo hacer un registro dinámico de depuración en una aplicación lanzada
fuente
Durante algún tiempo he estado usando un sitio de macros adoptado de varios anteriores. El enfoque de la mina es iniciar sesión en la consola, con énfasis en la verbosidad controlada y filtrada. ; Si no le importan muchas líneas de registro pero desea activar y desactivar fácilmente lotes de ellas, puede que le resulte útil.
Primero, opcionalmente reemplazo NSLog con printf como se describe anteriormente en @Rodrigo
A continuación, enciendo o apago el inicio de sesión.
En el bloque principal, defina varias categorías correspondientes a los módulos en su aplicación. También defina un nivel de registro por encima del cual no se llamarán las llamadas de registro. Luego defina varios sabores de salida NSLog
Por lo tanto, con la configuración actual de kLOGIFcategory y kLOGIFdetailLTEQ, una llamada como
imprimirá pero esto no
ni lo hará
Si desea anular la configuración de una llamada de registro individual, use un nivel negativo:
Creo que los pocos caracteres adicionales de escribir cada línea valen lo que puedo.
Estoy seguro de que a muchos les parecerá una exageración, pero en caso de que a alguien le convenga.
fuente