¿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)
}