Me gustaría registrar el seguimiento de llamadas durante ciertos puntos, como aserciones fallidas o excepciones no detectadas.
Me gustaría registrar el seguimiento de llamadas durante ciertos puntos, como aserciones fallidas o excepciones no detectadas.
Respuestas:
NSLog(@"%@",[NSThread callStackSymbols]);
Este código funciona en cualquier hilo.
backtrace/backtrace_symbols
directo
La respuesta de n13 no funcionó del todo: la modifiqué un poco 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;
}
}
NSLog(@"[Error] - %@ %@", exception.name, exception.reason);
si desea la excepción real
Cocoa ya registra el seguimiento de la pila en excepciones no detectadas en la consola, aunque solo son direcciones de memoria sin procesar. Si desea información simbólica en la consola, hay algunos códigos de muestra de Apple.
Si desea generar un seguimiento de la pila en un punto arbitrario de su código (y está en Leopard), consulte la página del manual de seguimiento. Antes de Leopard, en realidad tenía que cavar a través de la pila de llamadas.
Esto prácticamente te dice qué hacer.
Esencialmente, necesita configurar el manejo de excepciones de aplicaciones para iniciar sesión, algo como:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
Para excepciones, puede usar el miembro NSStackTraceKey del diccionario userInfo de la excepción para hacer esto. Consulte Control de la respuesta de un programa a las excepciones en el sitio web de Apple.
backtrace
ybacktrace_symbols
; consulte la página de manual de traza inversa (3).