はスウィフト3ではあなたは、単に(How to print call stack in Swift?から) でスタックバックトレースを印刷できるあらゆる:
for symbol in Thread.callStackSymbols {
print(symbol)
}
しかし、あなたは、スウィフトにCコードを変換する方法に興味がある場合: まずbacktrace()
機能 を利用できるように橋渡しヘッダファイルに
#include <execinfo.h>
を追加します。その後void *
は、スウィフトに UnsafeMutableRawPointer?
に対応し、あなたがほぼ完了していることに注意してください。
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)
}