如何在Swift中打印调用堆栈?

时间:2015-06-10 11:20:53

标签: swift debugging callstack

在Objective-C中,您可以通过执行以下操作来打印调用堆栈:

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

如何在不使用Foundation类的情况下在Swift中执行此操作?

5 个答案:

答案 0 :(得分:66)

正如雅各布森所说,请使用以下内容:

斯威夫特2:

print(NSThread.callStackSymbols())

Swift 3 / Swift 4:

print(Thread.callStackSymbols)

这是Swift代码。它使用的是Foundation方法,但你在iOS上做的比例要高出90%。

编辑:

请注意,如果您使用以下格式,则格式设置会更好:

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

在调试器命令行中,您可以键入

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

答案 1 :(得分:10)

对于Swift 3使用:

print(Thread.callStackSymbols)

或更好的格式化

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

答案 2 :(得分:5)

这稍微改善了输出。

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

答案 3 :(得分:2)

这是我在github上找到的一个很棒的实用工具类:

https://github.com/nurun/swiftcallstacktrace

您获得任何堆栈跟踪符号的元组(类,方法),以便您可以执行干净的打印输出。

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

答案 4 :(得分:0)

我需要将callstack写入日志文件,所以我就像这样调整它。

Repeat repeat = Repeat.Daily.Weekly.Yearly.Weekly;