記得這是某位朋友在一年多以前遇到的問題。當時他需要分析程式中各個 branch 和 statement 的執行統計資料,那時候我跟他建議 gcov,但沒多久他就跟我抱怨說 gcov 在 Mac OS X 上無法使用。因為這不是我關心的問題,而且我手邊沒有任何 Mac 系列的開發環境,所以就沒有繼續深究。

今天我們又談到同樣的話題,強者我友早就解決這個問題,他眼也不眨一下就直接在編譯器內部增加一個 compile pass,使編譯器自動在被編譯程式的每個 basic block 植入計數程式碼,最後再寫個分析程式處理統計資料。這差不多是 gcov 的工作方式,只是自己做的比 gcov 更直接符合需求。

接下來要講的是,我終於知道為何在 Mac OS X 上使用 gcov 會有問題。原因在於 Mac OS X 預設的 gcc/g++ 指令並非執行真正的 gcc/g++,而是 alias 成 llvm-gcc。因為 LLVM 並沒有提供相關的 code instrumentation 服務,所以不會吐出 gcov 可用的資訊,改用正牌的 gcc 或者 clang 應該就沒有問題了。以上資訊提供給有同樣需求的網友參考,不過我不是 Mac 使用者,所以有問題別找我。

所以我朋友真正需要做的只是安裝正港GCC,然後就可以正常使用 gcov 了。不過自己改寫編譯器或許可以獲得更多的控制能力,也不見得是多此一舉。

arrow
arrow
    全站熱搜

    novus 發表在 痞客邦 留言(2) 人氣()