源码调试准备

2020-09-08  本文已影响0人  KB_MORE

objc_debug

可编译苹果官方源码objc!可编译源码,LLDB调试,方便大家探索学习!

苹果开源 :macos 最新 10.15.6 objc版本:781

objc4-756.2

很多小伙伴在探索底层的时候经常很苦恼,只能靠猜测!稍微灵活一点的小伙伴会通过 Apple 提供的源码来辅助看一下,但是很显然这不太直观!如果能够直接编译调试,像我们自己的代码直接 LLDB 调试,流程跟踪。那简直不要太爽,于是我编译了现在最新的iOS_objc4-756.2

准备工作

如果想先来体验一把的小伙伴可以直接 GitHub 源码 下载!

如果你也想亲自体验一把,请你准备条件:

图片.png

以上资料都可以在 Apple source 获取到。

开始配置

i386 架构问题

首先你下载的iOS_objc4-756.2 直接编译会报错如下:

Showing Recent Messages
The i386 architecture is deprecated. You should update your ARCHS build setting to remove the i386 architecture.


图片.png

解决: 将 objcobjc-trampolines 中的 Build Settings 选项 Architectures 中的值切换为 Standard Architectures(64-bit Intel)

文件查漏补缺

'sys/reason.h' file not found

图片.png

这个资料我已经给大家找好了:

图片.png

把找到的文件加入到工程里面。例如:

图片.png

目前还不行,一定给我们的工程设置文件检索路径

'mach-o/dyld_priv.h' file not found

'os/lock_private.h' file not found

'os/base_private.h' file not found

'pthread/tsd_private.h' file not found

'System/machine/cpu_capabilities.h' file not found

'os/tsd.h' file not found

'pthread/spinlock_private.h' file not found

'System/pthread_machdep.h' file not found

'CrashReporterClient.h' file not found

'objc-shared-cache.h' file not found

'_simple.h' file not found

'Block_private.h' file not found

上面的报错情况处理方式都是和 'sys/reason.h' file not found 一样的解决

文件补漏情况如下图:

图片.png

CrashReporterClient异常

我们如果直接导入 Apple source 下载的 CrashReporterClient 还是会报错:

'CrashReporterClient.h' file not found

解决:

dyld_priv 文件修改

GitHub 源码 这是修改过的!下面板书我修改了什么

报错:Use of undeclared identifier ‘DYLD_MACOSX_VERSION_10_13

dyld_priv.h 文件顶部加入一下宏:

#define DYLD_MACOSX_VERSION_10_11 0x000A0B00
#define DYLD_MACOSX_VERSION_10_12 0x000A0C00
#define DYLD_MACOSX_VERSION_10_13 0x000A0D00
#define DYLD_MACOSX_VERSION_10_14 0x000A0E00

libobjc.order 路径问题

Can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order

图片.png

lCrashReporterClient 编译不到

Library not found for -lCrashReporterClient

_objc_opt_class 无法编译

Undefined symbol: _objc_opt_class

这个问题是因为要适配新系统:MacOS 10.15, 因为现在笔者写这一篇文章的时候,还没有正式版本推送!这里我们向下兼容 MacOS 10.14

图片.png

Xcode 脚本编译问题

/xcodebuild:1:1: SDK "macosx.internal" cannot be located.

/xcrun:1:1: sh -c '/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -sdk macosx.internal -find clang++ 2> /dev/null' failed with exit code 16384: (null) (errno=No such file or directory)

/xcrun:1:1: unable to find utility "clang++", not a developer tool or in PATH

图片.png

ObjectiveC.apinotes 异常

no such public header file: '/tmp/objc.dst/usr/include/objc/ObjectiveC.apinotes'

图片.png 图片.png

编译成功

接下来你可以编译 - Build Succeeded - 恭喜你!💐

可能到这里你已经老血吐了一地了!的确配置过程还是相对来说有点恶心,尤其是文件的查漏补缺,但是我们享受编译成功的喜悦吧!

objc 编译调试

图片.png 图片.png

可以直接来这里看哦 那个男人😎c

上一篇下一篇

猜你喜欢

热点阅读