Jak wydrukować ślad stosu do konsoli / logowania?

Chciałbym zarejestrować ślad wywołania w pewnych punktach, takich jak nieudane twierdzenia lub nieobciążone wyjątki.

Author: nhgrif, 2008-10-21

5 answers

 NSLog(@"%@",[NSThread callStackSymbols]);

Ten kod działa na każdym wątku.

 517
Author: smokris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-28 20:58:13

ODPOWIEDŹ N13 nie zadziałała-zmodyfikowałem ją nieco, aby wymyślić to

#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;
    }
}
 33
Author: Zayin Krige,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-09 05:13:31

Cocoa zapisuje już ślady stosu na nieobciążonych wyjątkach konsoli, chociaż są to tylko surowe adresy pamięci. Jeśli potrzebujesz symbolicznych informacji w konsoli, znajdziesz przykładowy kod od Apple.

Jeśli chcesz wygenerować ślad stosu w dowolnym punkcie kodu (i jesteś na Leopardzie), zobacz stronę podręcznika backtrace. Przed Leopardem trzeba było przekopać się przez sam stos połączeń.

 9
Author: vt.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 22:58:59

To mówi ci, co masz robić.

Zasadniczo musisz skonfigurować obsługę wyjątków aplikacji do logowania, coś w stylu:

#import <ExceptionHandling/NSExceptionHandler.h>

[[NSExceptionHandler defaultExceptionHandler] 
                  setExceptionHandlingMask: NSLogUncaughtExceptionMask | 
                                            NSLogUncaughtSystemExceptionMask | 
                                            NSLogUncaughtRuntimeErrorMask]
 6
Author: Max Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-27 14:00:03

W przypadku WYJĄTKÓW, możesz użyć członka nsstacktracekey w słowniku UserInfo wyjątku. Zobacz kontrolowanie odpowiedzi programu na wyjątki na stronie internetowej Apple.

 2
Author: Ben Gottlieb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 22:44:29