1

エラーの完全なスタックを知るには?

可能であれば、呼び出された関数の完全なスタックを確認したいと思います。

「一般」->「非常に専門的」な階層を持つ機能の階層があります。

5レベルの階層があるとします。

各関数には、次のように定義された完了エラー ブロックがあります。

typedef (^ErrorBlock)(NSError*error)

FunctionWithManyParams:(Param1Type*)param1.... onError:(ErrorBlock)ErrorBlock;

階層内の各関数には、コードの同じ部分があります。

onError(NSError*error){
    ErrorBlock(error);
}

したがって、高レベル (n)から関数を呼び出すと、(n-1) レベルなどから関数が呼び出されます。

また、1 レベルの関数にエラーがある場合は、それを呼び出す非常に高レベルの関数 (非常に特殊化された) にコールバックされます。

この呼び出しのフルパスを知ることは可能ですか? (またはそのためのテクニック)?

関数呼び出しの完全なトレースを取得したいので、次のようなものを追加する必要があります。

    onError(NSError*error){
       NSString*errorDescription = [self getNameOfFunction];
       NSMutableDictionary * errorDictionary = [NSMutableDictionary dictionary];
       NSString*previousErrorDescription = [error description];

       [errorDictionary setValue:[NSString stringWithFormat:@"%@ >> %@",previousErrorDescription,errorDescription ] forKey:NSLocalizedDescriptionKey];
            NSError * errorNew = [NSError errorWithDomain:vkDomain
                                                  code:errorCode
                                              userInfo:errorDictionary
                               ];
        ErrorBlock(errorNew);
    }
4

1 に答える 1

2

おそらくあなたが必要です:

NSLog(@"%@",[NSThread callStackSymbols]);
于 2012-09-14T08:01:29.833 に答える