Arama izini, başarısız iddialar veya yakalanmamış istisnalar gibi belirli noktalarda kaydetmek istiyorum.
Arama izini, başarısız iddialar veya yakalanmamış istisnalar gibi belirli noktalarda kaydetmek istiyorum.
Yanıtlar:
NSLog(@"%@",[NSThread callStackSymbols]);
Bu kod herhangi bir iş parçacığında çalışır.
backtrace/backtrace_symbols
doğrudan kullanın
n13'ün cevabı pek işe yaramadı - bunu bulmak için biraz değiştirdim
#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);
gerçek istisna da ekleyebilirsiniz
Cocoa, ham bellek adresleri olmasına rağmen, konsoldaki yakalanmamış istisnalar üzerinde yığın izini zaten kaydeder. Konsolda sembolik bilgi istiyorsanız bazı örnek kodlar vardır Apple'ın .
Kodunuzda rastgele bir noktada yığın izlemesi oluşturmak istiyorsanız (ve Leopard'daysanız), geri izleme man sayfasına bakın. Leopard'dan önce, aslında çağrı yığınının kendisini kazmanız gerekiyordu.
Bu size hemen hemen ne yapacağınızı söyler.
Temelde, günlüğe kaydetmek için uygulamalar istisna işleme ayarlamanız gerekir, örneğin:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
İstisnalar için, bunu yapmak için kural dışı durumun userInfo sözlüğünün NSStackTraceKey üyesini kullanabilirsiniz. Apple'ın web sitesinde Bir Programın İstisnalara Yanıtını Kontrol Etme konusuna bakın .
backtrace
vebacktrace_symbols
işlevlerini kullanın ; arka iz (3) kılavuzuna bakınız.