close

記得這是某位朋友在一年多以前遇到的問題。當時他需要分析程式中各個 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 的頭像
    novus

    novus log

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