使用 OBJC4-750.1 進行源碼調試

須知:html

  1. 最開始部分是講述整個配置 OBJC4-750.1 的整個過程
  2. 使用簡單的例子來說述,配合源碼對項目就行調試

首先,咱們須要下載 OBJC4 的源碼

  1. 下載地址:opensource.apple.com

  1. 咱們點擊最新的 10.14.1 加入下載源碼界面(這裏的源碼比較多,你可使用 Command + F )就行搜索,界面將會出來你想要的 objc4-750.1

此時你能夠點擊右邊的下載,便可下載源碼包。

或者你也能夠點擊進入c++

此時地址爲:opensource.apple.com/source/objc… 界面以下: git

這樣就能夠出現歷史版本的列表。github

Source 改爲 tarballs 便可看到全部歷史版本的列表macos

以上就是下載的整個過程。api

下面咱們來配置 OBJC4-750.1 的源碼

  • 接下來,咱們打開項目,下載的初始項目是這樣的。 bash

  • 編譯一下。它會提示咱們 「Remove」 i386 架構模式。架構

  • 去掉 i386 架構的步驟 app

  • 而後提示咱們少了 sys/reason.h函數

上網找了很久,終於在

opensource.apple.com/source/xnu/…

找到了文件 手動保存一下,命名爲:reason.h

第五步輸入爲: $(SRCROOT)/CommondHeader 指向reason.h 所在地址

而後當你編譯時,還有會有不少錯誤。咱們依依按照這種方法來搞定。

  • 接下來是 mach-o/dyld_priv.h ,咱們依舊按照以前的方式來搞定。
  1. 搜索 mach-o/dyld_priv.h ,找到地址(opensource.apple.com/source/dyld… 下載命名爲:dyld_priv.h
  2. 接下來是 lock_private.h,下載地址(opensource.apple.com/source/libp…, 下載命名爲:lock_private.h
  • 接下來是 base_private.h tsd_private.h

接下來是函數找不到,只須要去 Build Setting -> preprocessor Macros 加入

LIBC_NO_LIBCRASHREPORTERCLIENT

  • 接下來編譯會出現
ld: warning: -F path '/Users/kare/OC/OpenSource/objc4-750.1/libobjc.order' is not a directory
ld: can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/AppleInternal/OrderFiles/libobjc.order 複製代碼

  • 而後是
ld: warning: -F path '/Users/kare/OC/OpenSource/objc4-750.1/libobjc.order' is not a directory
ld: library not found for -lCrashReporterClient
複製代碼

那麼去 Build Setting 搜索 lCrashReporterClient 刪除便可.

  • 接下來是

最終是

set -x /usr/bin/xcrun -sdk macosx clang++ -Wall -mmacosx-version-min=10.12 -arch x86_64 -std=c++11 "{SRCROOT}/markgc.cpp" -o "{BUILT_PRODUCTS_DIR}/markgc" "{BUILT_PRODUCTS_DIR}/markgc" "{BUILT_PRODUCTS_DIR}/libobjc.A.dylib"

  • 接上
error: no such public header file: '/tmp/objc.dst/usr/include/objc/ObjectiveC.apinotes'
複製代碼

把這裏設置爲 Errors Only

可是還會報這個錯誤

暴力解法,直接把這裏的東西所有刪除掉。再編譯,就能夠成功了。

過程很漫長,可是仍是頗有意思的。

而後就是簡歷 target,使用源碼調試了。

好比想看class_copyIvarList內部實現,直接點擊進入就行了喲。

快來試試吧,有源碼,就直接懟個窟窿。不服就幹。

另外,提供一份已經配置好的 Objc-750.1 可編譯的源碼。

Github 地址

相關文章
相關標籤/搜索