2016-11-25 3 views
0
迅速

でbacktrace_symbols()を呼び出す方法を、私はbacktracebacktrace_symbolsを呼び出すことができますどのように、輸入#include <execinfo.h>Objective-Cで

ではなく、迅速にバックトレースに void* callstack[128]; int frames = backtrace(callstack, 128); char **strs = backtrace_symbols(callstack, frames); を取得するためのコードを呼び出すことができ、私は見つけるカントexecinfoファイル

答えて

2

はスウィフト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) 
} 
関連する問題