我希望剖析我用Haskell編寫的程序。個人檔案Haskell沒有安裝所有依賴項的安裝分析庫
在編譯時,我被告知我沒有針對某些依賴性(例如criterion
)安裝的分析庫以及cabal
中止。
我對分析這些依賴關係的部分沒有興趣;從main
調用的代碼甚至不使用它們。
如何在不安裝概要分析庫的情況下對我的應用程序進行概要分析我不需要並且不移除所有這些依賴關係?
我希望剖析我用Haskell編寫的程序。個人檔案Haskell沒有安裝所有依賴項的安裝分析庫
在編譯時,我被告知我沒有針對某些依賴性(例如criterion
)安裝的分析庫以及cabal
中止。
我對分析這些依賴關係的部分沒有興趣;從main
調用的代碼甚至不使用它們。
如何在不安裝概要分析庫的情況下對我的應用程序進行概要分析我不需要並且不移除所有這些依賴關係?
一個很好的方法來規避編譯一切與分析是使用cabal沙箱。它允許您爲一個應用程序設置沙盒,因此您不必重新安裝整個~/.cabal
前綴。你需要最近版本的Cabal,所以先運行cabal update && cabal install cabal-install
。
一旦你初始化一個沙箱中,創建一個文件cabal.config
,包括必要的指令(在你的情況library-profiling: True
; executable-profiling: True
也可能派上用場。)
這樣做的副作用是,你可以測試你的代碼不需要全局安裝的依賴關係,例如實驗版本或過時版本。
編輯:順便說一句,我不認爲你需要分析啓用criterion
工作。無論如何,它適用於我沒有分析被啓用。只需編寫一個包含main = defaultMain benchmarks
的Main
模塊,其中benchmarks
的類型爲[Benchmark]
,即您編寫的基準測試列表。
然後,您將這些文件(比如說,我們把它叫做benchmarks.hs
與ghc --make -o bench benchmarks.hs
,並運行程序,./bench
使用適當的參數(詳情參閱標準文檔。一個好的默認參數爲,說./bench -o benchmarks.html
這將產生一個漂亮的?報告類似this one)
這個星期我有同樣的問題,雖然我已經重新編譯手的一切,我奉命在IRC頻道執行以下操作:
正如你提到的問題中提及在您的評論中,未來解決此問題的一個好方法是在cabal配置中啓用分析。這樣所有的庫都安裝了分析支持。這可能不是一個令人滿意的解決方案,但我想很多人都選擇它。
如果您只想瞭解程序的內存使用情況,則可以使用-hT
生成程序的堆配置文件。更確切地說,您必須編譯程序-rtsopts
以啓用RTS選項,然後使用+RTS -hT
執行它。編譯器生成一個擴展名爲hp
的文件。您可以使用hp2ps
將hp
文件轉換爲帶有堆配置文件的postscript文件。這應該沒有任何分析支持,但請注意,我懶得驗證它,因爲我已經安裝了所有支持分析支持的庫; )
已驗證,它是真的。 –
哇,你是對的!堆配置文件不需要'-prof',所以如果我只需要空間剖析就不會出現上述問題。尼斯。 – nh2
請注意,這隻適用於'-hT',即基於類型的堆分析。還有其他的分析類型,如保留器分析,仍然需要'-prof'。 –
你不能簡單地安裝它們,什麼問題 –
1)我不需要他們,2)安裝他們是令人難以置信的繁瑣:http://stackoverflow.com/questions/1704421/cabal-not-installing-dependencies-when-needs-profiling-libraries – nh2
儘管我同意這很乏味,但你聲稱你不需要它們,這顯然是錯誤的。 –