在Objective-C中,您可以通过执行以下操作来打印调用堆栈:
NSLog(@"%@", [NSThread callStackSymbols]);
如何在不使用Foundation类的情况下在Swift中执行此操作?
答案 0 :(得分:66)
正如雅各布森所说,请使用以下内容:
print(NSThread.callStackSymbols())
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;