Dl_info为空时怎么获得呢
时间: 2024-03-21 22:38:20 浏览: 60
如果 `dladdr` 函数返回的 `Dl_info` 结构体中的 `dli_sname` 字段为空,那么可能是因为该函数指针没有对应的符号信息(symbol),这种情况下就无法通过符号信息来获取类名了。
在这种情况下,可以尝试使用其他方式来获取类名,比如使用 Objective-C 运行时库中的函数来获取类名。具体来说,可以使用 `object_getClassName` 函数来获取对象的类名,或者使用 `class_getName` 函数来获取类的名称。示例代码如下:
```
#import <objc/runtime.h>
void *imp = class_getMethodImplementation([NSString class], @selector(lowercaseString));
Dl_info info;
if (dladdr(imp, &info) && info.dli_sname) {
// 获取符号信息中的类名
NSString *symbol = [NSString stringWithUTF8String:info.dli_sname];
NSArray *components = [symbol componentsSeparatedByString:@" "];
NSString *className = [components[0] substringFromIndex:1];
NSLog(@"Class name: %@", className);
} else {
// 如果符号信息为空,使用 Objective-C 运行时库获取类名
id obj = [NSString lowercaseString];
const char *className = class_getName(object_getClass(obj));
NSLog(@"Class name: %s", className);
}
```
在示例代码中,如果 `dladdr` 函数返回的符号信息中的类名为空,就使用 Objective-C 运行时库中的函数来获取类名。具体来说,创建了一个 `NSString` 对象,并通过 `object_getClass` 函数获取该对象的类,然后使用 `class_getName` 函数来获取类名。
阅读全文