Objective-C 中用__builtin_frame_address获取函数名
时间: 2024-03-18 16:42:39 浏览: 89
在C语言中以编程的方式获取函数名
在Objective-C中,可以通过`__builtin_frame_address`函数获取当前函数调用堆栈中某个帧的地址,然后使用`backtrace_symbols`函数将地址转换为函数名。
具体实现可以参考以下代码:
```objective-c
void printFunctionNames() {
void *frames[100];
int numFrames = backtrace(frames, 100);
char **symbols = backtrace_symbols(frames, numFrames);
if (symbols != NULL) {
for (int i = 1; i < numFrames; i++) {
void *frame = frames[i];
char *symbol = symbols[i];
Dl_info info;
if (dladdr(frame, &info) && info.dli_sname != NULL) {
printf("Function name: %s\n", info.dli_sname);
}
}
free(symbols);
}
}
```
这个函数使用`backtrace`函数获取当前函数调用堆栈,然后使用`backtrace_symbols`函数将堆栈转换为函数符号字符串。接着,对于每个堆栈帧,使用`dladdr`函数将地址转换为函数信息,包括函数名。最后,输出每个函数的名称。
需要注意的是,这个方法的实现依赖于系统提供的动态链接库信息,可能会有一定的限制。
阅读全文