swift debugging callstack

¿Cómo imprimir la pila de llamadas en Swift?



debugging callstack (5)

Aquí hay una gran clase de utilidad que encontré en github:

https://github.com/nurun/swiftcallstacktrace

Obtendrá una tupla (clase, método) de cualquier símbolo de seguimiento de pila para que pueda hacer una impresión limpia.

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

En Objective-C, puede imprimir la pila de llamadas haciendo lo siguiente:

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

¿Cómo haces esto en Swift sin usar la clase Foundation?


Como dice Jacobson, usa lo siguiente:

Swift 2:

print(NSThread.callStackSymbols())

Swift 3 / Swift 4:

print(Thread.callStackSymbols)

Ese es el código Swift. Está utilizando un método Foundation, pero también lo hace el 90% de lo que haces en iOS.

EDITAR:

Tenga en cuenta que el formato se ve mejor si utiliza:

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

Desde la línea de comando del depurador puede escribir

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


Esto mejora un poco la salida.

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


Necesitaba escribir la pila de llamadas en un archivo de registro, así que lo modifiqué así.

var ErrorStack = String() Thread.callStackSymbols.forEach { print($0) ErrorStack = "/(ErrorStack)/n" + $0 }


Para el uso de Swift 3:

print(Thread.callStackSymbols)

o para un mejor formato

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