iphone - ts4515 - Desactivar el registro de la consola para objetos específicos
desvincular iphone de mi cuenta icloud (3)
Es algo molesto: desde que comencé a usar el MPMoviePlayerController, la consola está sobrecargada con información de MPAVController. P.ej:
[MPAVController] Autoplay: _streamLikelyToKeepUp: 1 -> 1
[MPAVController] Autoplay: Disabling autoplay
Esto es algo molesto porque siempre tengo que buscar mi propia información registrada. ¿Hay alguna forma de desactivar el registro de objetos o marcos específicos?
Deberías mirar NSLogger . Si bien NSLog no le brinda ninguna selectividad sobre lo que ve desde la ejecución hasta la ejecución, NSLogger puede hacerlo. NSLogger muestra la salida del dispositivo (o simulador) en su propia ventana en OS X.
Básicamente, agrega el concepto de facilidad y nivel a la salida. Los asistentes de Unix pueden encontrar fallas en esta comparación, pero la veo muy similar a syslog. El visor NSLogger le permite visualizar mensajes de salida para una o más instalaciones (que usted defina) que también cumplen con el nivel mínimo requerido.
Las macros definen lo que ves en la ventana de salida. Aquí hay un extracto:
#ifdef DEBUG
#define LOG_GENERAL(level, ...) LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"general",level,__VA_ARGS__)
#else
#define LOG_GENERAL(...) do{}while(0)
#endif
Cuando DEBUG está desactivado, no aparece ningún mensaje. Cuando está activado, si tiene una sentencia LOG_GENERAL () en el código y su visor está configurado para mostrar el recurso "general" y su nivel es suficiente para mostrarse, usted recibe un mensaje.
Es increíblemente flexible y me gusta mucho. Toma alrededor de cinco minutos agregarlo a su proyecto. Por favor, eche un vistazo a la página de github vinculada anteriormente para obtener todos los detalles y descargar.
(Esto no resolverá el problema de que MPAVController llene la consola con mensajes, pero pone los mensajes que desea en una nueva ventana, lo que facilita mucho el control, el filtro y la interpretación de lo que le interesa).
No creo que ese filtrado sea posible de forma inmediata. Pero es posible redirigir stderr
(que NSLog
) a un conducto, leer desde ese conducto en un hilo de fondo y luego imprimir mensajes que pasan por el filtro en stdout
(que también es capturado por el depurador). Este código hace el trabajo:
int main(int argc, char *argv[])
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void) {
size_t const BUFFER_SIZE = 2048;
// Create a pipe
int pipe_in_out[2];
if (pipe(pipe_in_out) == -1)
return;
// Connect the ''in'' end of the pipe to the stderr
if (dup2(pipe_in_out[1], STDERR_FILENO) == -1)
return;
char *buffer = malloc(BUFFER_SIZE);
if (buffer == 0)
return;
for (;;)
{
// Read from the ''out'' end of the pipe
ssize_t bytes_read = read(pipe_in_out[0], buffer, BUFFER_SIZE);
if (bytes_read <= 0)
break;
// Filter and print to stdout
if (should_show(buffer)) // TODO: Apply filters here
fwrite(buffer, 1, bytes_read, stdout);
}
free(buffer);
close(pipe_in_out[1]);
});
// Rest of main
}
Tenga en cuenta que este código es bastante simple y no maneja todos los casos de esquina. En primer lugar, captura toda la salida de stderr
y no solo NSLog
. Tal vez esto podría filtrarse comprobando el contenido. NSLog
salida NSLog
siempre comienza con la fecha y la hora.
El segundo problema con este código es que no intenta dividir / unir las cadenas que lee del conducto. No hay garantía de que haya un NSLog
por lectura. Podrían estar juntos o ser demasiado largos y estarían divididos. Para manejar esto, se requeriría un procesamiento adicional de los datos leídos desde la tubería.
De todos modos, para muchos propósitos prácticos esto debería ser suficiente.
Otra opción, si puede usarlo, es ejecutar un simulador o un dispositivo con iOS <6.0.
Los mensajes de registro de MPAVController no aparecen cuando uso un dispositivo 5.0 o el simulador 5.1. Pero definitivamente aparecen en el simulador 6.0.
Por supuesto, uno generalmente debe usar el sistema operativo actual, pero si uno está trabajando en una sección de video pesado de un proyecto, ejecutar un simulador o dispositivo anterior mientras trabaja en ese conjunto particular de tareas es una forma de aliviar este dolor de cabeza de registro.
Esto también proporciona algunas pruebas de compatibilidad con versiones anteriores como una bonificación.