Подтвердить что ты не робот

Как распечатать стек вызовов в Swift?

В Objective-C вы можете распечатать стек вызовов, выполнив следующие действия:

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

Как вы это делаете в Swift без использования класса Foundation?

4b9b3361

Ответ 1

Как говорит Джейкобсон, используйте следующее:

Swift 2:

print(NSThread.callStackSymbols())

Swift 3:

print(Thread.callStackSymbols)

Этот код Swift. Он использует метод Foundation, но также делает 90% + того, что вы делаете на iOS.

EDIT:

Обратите внимание, что форматирование выглядит лучше, если вы используете:

Thread.callStackSymbols.forEach{print($0)}

В командной строке отладчика вы можете ввести

e Thread.callStackSymbols.forEach{print($0)}

Ответ 2

Для Swift 3 используйте:

print(Thread.callStackSymbols)

или для лучшего форматирования

for symbol: String in Thread.callStackSymbols {
    print(symbol)
}

Ответ 3

Это немного улучшает выход.

for symbol: String in NSThread.callStackSymbols() {
    NSLog("%@", symbol)
}

Ответ 4

Здесь большой класс полезности, который я нашел на github:

https://github.com/nurun/swiftcallstacktrace

Вы получаете кортеж (класс, метод) любого символа трассировки стека, чтобы вы могли сделать чистую распечатку.

CallStackAnalyser.classAndMethodForStackSymbol(NSThread.callStackSymbols()[2])