bestswifter / BSBacktraceLogger

记录线程的调用栈
GNU General Public License v3.0
977 stars 216 forks source link

请问为什么不用系统提供的dladdr方法,而需要自己写一个fl_dladdr呢? #8

Open Dave1991 opened 7 years ago

Dave1991 commented 7 years ago

系统提供的dladdr方法是线程安全的,而代码中的fl_dladdr其实底层调用的也是系统提供的_dyld_get_image_header和_dyld_get_image_name等方法,而这些方法是线程不安全的,经过我本人的实验对比,fl_dladdr返回的symbolbuffer和dladdr返回的结果是一样的,不清楚作者是出于什么样的考虑自己重写了一个fl_dladdr方法。

bestswifter commented 7 years ago

这段代码是从 PLC 里面抄出来的

Dave1991 commented 7 years ago

PLC是?能给个地址吗?

kobe1941 commented 5 years ago

@Dave1991 PLCrashReporter 某著名的iOS APP崩溃时收集堆栈信息的库

chenzhengxu commented 5 years ago
bool bs_dladdr(const uintptr_t address, Dl_info* const info) {
    dladdr((void *)address, info);
    return true;
}

的确,这个方法直接用dladdr好像也没啥问题