在使用CocoaPod的Xcode工程中斷點沒有除錯資訊的問題跟進

思禽發表於2017-03-06

通常客戶端產品至少都會有Debug和Release兩種編譯配置,在編譯Release版本中會進行一些優化,以減少最終產品的體積。
比如,在Release版本中會對程式碼執行步驟進行優化(如O1、O2等),這會導致有些程式碼被優化省略掉,有時無法單步除錯;另外就是會去掉符號資訊,這會導致斷點除錯時沒有符號資訊,所以才會有CallStack的捕獲和解析內容

由於千牛iOS端會有不同版本,分別面向內部開發者、外部ISV以及終端使用者。尤其是在整合QAP專案後需要提供一個專門的開發除錯版本給QAP開發者,所以新增了一個QAPDistribution Scheme,並且這個Scheme是從Debug Scheme複製過來的,所以按道理是可以進行除錯、檢視符號資訊的。結果在使用這個Scheme進行開發除錯的過程中發現符號資訊缺失,控制檯輸出如下資訊:

AppName was compiled with optimization - stepping may behave oddly; variables may not be available.

這就給我們排查問題帶來不便。雖然可以切換成Debug來除錯排查,但由於給ISV的版本不是Debug的,所以環境不一致,可能會導致一些遺漏。於是我再次確認了下編譯配置資訊:

screenshot.png

確實和Debug是一致的,這就帶來了困惑。
後來進一步發現在千牛自身程式碼中是有符號資訊的,但是跟進到Pod依賴中就缺失了,所以懷疑是不是Pod工程的編譯配置有問題:

screenshot.png

screenshot.png

發現果然Pods工程的編譯配置是有對QAPDistribution Scheme進行優化的。那麼問題來了,如果我手動修改一下,之後再進行pod update是不是又會復原?驗證了下果然如此,所以只能通過Pod本身的配置來解決問。在網上搜了下,有如下解決方案

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    if config.name.include?("QapDistribution")
      config.build_settings[`GCC_OPTIMIZATION_LEVEL`] = `0`
    end
  end
end

screenshot.png

經驗證有效。


相關文章