在Objective-C中,我可以调用代码来获取回溯
void* callstack[128];
int frames = backtrace(callstack, 128);
char **strs = backtrace_symbols(callstack, frames);
Run Code Online (Sandbox Code Playgroud)
按进口 #include <execinfo.h>
但是在 Swift 中,我如何调用backtrace
and backtrace_symbols
,我在execinfo
任何地方都找不到文件。
在 Swift 3 中,您可以简单地打印堆栈回溯(来自How to print call stack in Swift?):
for symbol in Thread.callStackSymbols {
print(symbol)
}
Run Code Online (Sandbox Code Playgroud)
但是如果你对如何将 C 代码翻译成 Swift 感到好奇:首先添加
#include <execinfo.h>
Run Code Online (Sandbox Code Playgroud)
到桥接头文件以使该backtrace()
函数可用。然后注意void *
对应
UnsafeMutableRawPointer?
于 Swift 中,你就差不多完成了:
var callstack = [UnsafeMutableRawPointer?](repeating: nil, count: 128)
let frames = backtrace(&callstack, Int32(callstack.count))
if let symbols = backtrace_symbols(&callstack, frames) {
for frame in 0..<Int(frames) where symbols[frame] != nil {
let symbol = String(cString: symbols[frame]!)
print(symbol)
}
free(symbols)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1430 次 |
最近记录: |