我使用CounterClockWise在Windows 7操作系統上開發我的第一個Clojure項目。除了JavaScript(我不太熟悉),這是我的第一個動態類型語言。我可以使用哪些技術來調試我的Clojure代碼?
構建我的項目最困難的部分是調試我遇到的問題。我一直在使用的技術是在地方噴灑println
以確認我的輸入和輸出是我想要的。
與Java相比,似乎很多Clojure函數接受我認爲垃圾輸入並愉快地返回nil。因此,您看到的運行時異常可能來自遠離問題原因的許多功能。我的觀點是,甚至很難知道把println
放在哪裏。
而且,這些運行時異常正在輸出編譯的代碼行號,所以它們的信息量不大。我的大多數功能都是短暫且無副作用的,但問題是我的輸入是網頁。有時,函數的輸入是原始html,有時候是解析html(通過enlive),有時候是鏈接列表(通過在解析的html上使用類似css的選擇器)。這些輸入可以是深層嵌套的,複雜的結構(即地圖列表地圖的列表),因此不容易手動建立它們。當你的堆棧跟蹤沒有指出問題時,我幾乎不得不調試一半程序,並找出如何爲每個部分生成輸入。這相當耗時。
在IRC頻道有人告訴我stacktrace library這使得調試更容易。它仍然指出許多功能遠離錯誤輸入的來源,但仍然有幫助。我正在尋找更多像這樣的技術。我可以使用哪些技術更好地調試我的代碼?
我在OP中回答了這個問題,看看我的更新。謝謝 – 2013-04-08 18:15:07
當然,在這種情況下,您已經描述過,使用IntelliJ IDEA的調試器可能是最好的解決方案。 您也可以使用clojure.tools.trace包跟蹤你的函數調用,但如果輸入/輸出參數都很大,我不認爲這將是可讀的。 – 2013-04-08 20:05:07