Dladdr获取dli_sname结果出错问题

inline __attribute__((always_inline))
static void check_cm(Class cls, SEL method, int bClassMethod) {
  IMP __code__IMP;
  Dl_info __code__info;

  Method __code__meth = bClassMethod ? class_getClassMethod(cls, method) : class_getInstanceMethod(cls, method);

  __code__IMP = method_getImplementation(__code__meth);
  dladdr((const void *)__code__IMP, &__code__info);
  NSLog(@"1:%s", __code__info.dli_sname);
  NSLog(@"2:%s", __code__info.dli_fname);
}

@implementation TestViewController

+ (void)load {
    check_cm([TestViewController class], @selector(AFuncation), 0);
    check_cm([TestViewController class], @selector(BFuncation), 0);
    check_cm([TestViewController class], @selector(CFuncation), 0);
}

void registerFuncation() {}

- (void)AFuncation {}

- (void)BFuncation {}

- (void)CFuncation {
    registerFuncation();
}

@end

上诉这段代码,App进程与VPN进程共用。

通过Xcode Archive编译,两个进程运行的结果都正确。
通过xcodebuild archive 命令来编译的,App进程运行结果正确,VPN进程打印结果sname变成registerFuncation。
这是为什么?