失敗したアサーションやキャッチされていない例外など、特定の時点でコール トレースをログに記録したいと考えています。
91346 次
7 に答える
557
このコードはどのスレッドでも機能します。
NSLog(@"%@", NSThread.callStackSymbols);
コール スタック シンボルを含む配列を返します。各要素は
NSString
、関数によって決定される形式の値を持つオブジェクトbacktrace_symbols()
です。
于 2010-02-24T00:42:15.040 に答える
35
n13の答えはうまくいきませんでした-これを思い付くために少し修正しました
#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;
}
}
于 2013-01-09T05:13:31.803 に答える
9
Cocoaは、キャッチされていない例外のスタックトレースを、単なる生のメモリアドレスですが、コンソールにすでに記録しています。コンソールに記号情報が必要な場合は、Appleのサンプルコードがいくつかあります。
コード内の任意のポイントでスタックトレースを生成する場合(およびLeopardを使用している場合)は、バックトレースのマニュアルページを参照してください。Leopardの前は、実際にはコールスタック自体を掘り下げる必要がありました。
于 2008-10-20T22:58:59.770 に答える
6
これは、何をすべきかをほとんど示しています。
基本的に、ログに記録するアプリケーションの例外処理を設定する必要があります。たとえば、次のようになります。
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
于 2008-10-20T22:28:52.560 に答える
2
例外の場合、例外の userInfo ディクショナリの NSStackTraceKey メンバーを使用してこれを行うことができます。Apple の Web サイトで、例外に対するプログラムの応答の制御を参照してください。
于 2008-10-20T22:44:29.393 に答える