2012-01-11 24 views
6

在我看來這是一個新的想法(因爲我還沒有找到任何解決方案或任何已實施的話)刪除調試行...如何不要忘記在代碼

的Shell腳本自動運行,無論你何時提交git提交或任何可以讓你知道是否忘記刪除項目中任何調試或開發環境特定代碼行的內容。

例如:

很多時候(在我的Ruby項目),我將離開輸出變量的代碼行像

puts params.inspect 

raise params.inspect 

此外,有時我將使用不同的方法,以便我可以輕鬆查看效果,例如在使用delayed_job的情況下,我寧可在不使用de的情況下調用方法在開發期間放置。

問題是有時候我忘了改回這些方法,或忘記刪除一個調用來引發params.inspect,我會無意中推送該代碼。

所以我想,也許最簡單的解決辦法是註釋添加到任何這樣的調試線,如

raise params.inspect #debug 

在本質上標記該行作爲唯一的開發/調試行。然後在一個shell腳本運行在像git commit之類的其他命令之前,它可以使用awk或grep搜索該#debug註釋的所有最新修改文件,並停止執行並提醒您。不過我對shell腳本知之甚少,所以我想我會尋求幫助:)

+0

您不需要使用shell腳本語言編寫腳本,如果需要,可以使用ruby編寫腳本。 – jcollado 2012-01-11 19:59:10

+0

在Java中,添加if(log.isDebugEnabled){debug logging ..}是一個好習慣。我不確定shell中是否存在類似的東西。 – 2012-01-11 22:41:37

+0

@srikanthradix - logback框架將自己的檢查內容建立起來,這樣您就可以使用'log.debug()'而不是使用'if'語句更加混淆代碼。 – cdeszaq 2012-01-12 13:48:13

回答

7

儘管我全心全意地推薦下面的cdeszaq'a建議,並勸阻做這種事情,寫一個git鉤子很容易,它會阻止你提交任何特定字符串的行。爲了簡單起見,我沒有顯示git rev-parse --verify HEAD,你應該使用它來使這個鉤子在初始提交時工作,但是如果你簡單地在.git/hooks/pre-commit(並且make它可執行文件),您將無法提交包含字符串「#調試」的任何代碼:

 
#!/bin/sh 

if git diff-index -p -M --cached HEAD | grep '#debug' > /dev/null; then 
    echo 'debug lines found in commit. Aborting' >&2 
    exit 1 
fi 
+0

夥計這看起來很棒。謝謝。我會盡快嘗試。 – DiegoSalazar 2012-01-12 01:42:13

+0

令人驚歎的感謝! – DiegoSalazar 2012-01-13 00:25:17

2

正如我在我的評論中所說的,您可以使用任何您感覺舒適的編程語言。

無論如何,尋找其他提交鉤子,我認爲this one可能是一個很好的開始。它基本上會查找文件中的一些單詞,並且可以自定義,只需更改文件頂部的checks陣列即可。

+0

這也解決了這個問題,只是給了Pursell的答案,因爲它相似而且更快:P謝謝! – DiegoSalazar 2012-01-12 01:44:00

3

而不是必須記得做額外的工作(除去行代碼)才需要做更多工作後,當事情再次突破(重新添加的代碼),爲什麼不把在合理的調試語句從開始

大多數語言都有相當富有表現力且通常便宜的日誌記錄庫,可以讓您將不同級別的信息(錯誤,信息,調試,跟蹤)寫入多個不同位置(文件,數據庫)。這些庫中的許多庫甚至可以讓您在運行時或甚至的某個特定代碼塊上調整日誌記錄級別,而程序運行時則爲

因此,與其試圖通過編寫腳本解決問題來勉強進行蠻力調試,爲什麼不自己做,而世界其他地方則必須使用您生產的產品,並且使用實際的日誌記錄框架日誌記錄?

+0

謝謝你的回答,但是這並不能解決使用delayed_job的問題,這取決於你所處的環境。我同意你在日誌記錄部分。我會用適當的記錄器方法來陳述這些陳述。 – DiegoSalazar 2012-01-12 01:41:10

0

@cdeszaq是有關日誌部分正確。

對於行爲根據環境的不同而不同,實現此目的的常用方法是使行爲可配置。 delayed_job應該從配置文件中讀取一個值來決定延遲多長時間。對於生產環境,配置將具有一個值,對於開發環境,配置將具有不同的值。