Saya ingin mencatat jejak panggilan selama titik-titik tertentu, seperti pernyataan yang gagal, atau pengecualian yang tidak tertangkap.
Saya ingin mencatat jejak panggilan selama titik-titik tertentu, seperti pernyataan yang gagal, atau pengecualian yang tidak tertangkap.
Jawaban:
NSLog(@"%@",[NSThread callStackSymbols]);
Kode ini berfungsi di utas apa pun.
backtrace/backtrace_symbols
langsung
Jawaban n13 tidak cukup bekerja - saya memodifikasinya sedikit untuk menghasilkan ini
#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);
jika Anda menginginkan pengecualian yang sebenarnya juga
Kakao sudah mencatat jejak tumpukan pada pengecualian tanpa tertangkap ke konsol meskipun mereka hanya alamat memori mentah. Jika Anda ingin informasi simbolik di konsol ada beberapa kode contoh dari Apple.
Jika Anda ingin membuat jejak stack pada titik sembarang dalam kode Anda (dan Anda menggunakan Leopard), lihat halaman manual backtrace. Sebelum Leopard, Anda sebenarnya harus menggali melalui tumpukan panggilan itu sendiri.
Ini cukup banyak memberi tahu Anda apa yang harus dilakukan.
Pada dasarnya Anda perlu mengatur pengecualian aplikasi yang menangani untuk log, sesuatu seperti:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
Sebagai pengecualian, Anda dapat menggunakan anggota NSStackTraceKey dari kamus userInfo pengecualian untuk melakukan ini. Lihat Mengontrol Respons Program terhadap Pengecualian di situs web Apple.
backtrace
danbacktrace_symbols
fungsinya; lihat manual backtrace (3).