objective c - script - ¿Cómo se imprime un seguimiento de pila en la consola/inicio de sesión en Cocoa?
script limpiar cola de impresion (6)
Cocoa ya registra el seguimiento de la pila en las excepciones no detectadas de la consola, aunque solo son direcciones de memoria sin procesar. Si desea información simbólica en la consola, hay algunos ejemplos de código de Apple.
Si desea generar un seguimiento de pila en un punto arbitrario en su código (y está en Leopard), consulte la página de manual de backtrace. Antes de Leopard, tenías que cavar a través de la pila de llamadas.
Me gustaría registrar el rastreo de llamadas durante ciertos puntos, como afirmaciones fallidas o excepciones no detectadas.
En la impresión rápida de esta manera:
print("stack trace:/(Thread.callStackSymbols)")
La respuesta de n13 no funcionó del todo. Lo modifiqué ligeramente para llegar a esto.
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
int retval;
@try{
retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception)
{
NSLog(@"Gosh!!! %@", [exception callStackSymbols]);
@throw;
}
return retval;
}
}
Para excepciones, puede usar el miembro NSStackTraceKey del diccionario de información de usuario de la excepción para hacer esto. Consulte Control de la respuesta de un programa a las excepciones en el sitio web de Apple.
This casi te dice qué hacer.
Esencialmente necesita configurar el manejo de excepciones de aplicaciones para registrar, algo como:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
NSLog(@"%@",[NSThread callStackSymbols]);
Este código funciona en cualquier hilo.