gpt4 book ai didi

swift - 如何在 Swift 中调用 backtrace_symbols()

转载 作者:搜寻专家 更新时间:2023-11-01 06:17:41 25 4
gpt4 key购买 nike

在 Objective-C 中,我可以调用代码来获取回溯

void* callstack[128];
int frames = backtrace(callstack, 128);
char **strs = backtrace_symbols(callstack, frames);

通过进口#include <execinfo.h>

但是在 Swift 中,我如何调用 backtracebacktrace_symbols , 我找不到 execinfo在任何地方归档。

最佳答案

在 Swift 3 中,您可以简单地打印堆栈回溯(来自 How to print call stack in Swift? ):

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

但是如果你好奇如何将 C 代码转换为 Swift:先加

#include <execinfo.h>

到桥接头文件以生成 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)
}

关于swift - 如何在 Swift 中调用 backtrace_symbols(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40801545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com