Apr 26
除錯 Debug
icon1 Li Cheng | icon2 Uncategorized | icon4 04 26th, 2007| icon3No Comments »

先試試你的 code

應用 Ruby 的 functions 時,有時後記不太得正確的寫法是什麼。 如用猜的話又不知道猜的對不對。 這時候有兩種可試的地方。如果不確定寫法的那段碼純粹是 ruby 的話,你可以用 irb。 在任何的路徑打 “irb” 就可以開始測試 ruby 的語法了:

wrl88-083:~ lichu$ irb
irb(main):001:0> 1 + 2
=> 3
irb(main):002:0> exit
wrl88-083:~ lichu$ 

wrl88-083:~ lichu$ 是我的 command prompt, 只要打 “irb” 就好,不用打 wrl88-083:~ lichu$ 。 記得, irb 純粹只是測試 ruby 碼而已喔,不會測試 Rails 碼。 如果要測試的程式碼有用到 Rails 的 class 的話,那就要去現在在開發中的 Rails 程式目錄下打指令。 例如,我的一個程式叫 “dog” 放在 “projects” 的目錄下,而且我想測試一行程式碼 “20.days.from_now”:

wrl88-083:~ lichu$ cd projects
wrl88-083:~/projects lichu$ cd dog
wrl88-083:~/projects/dog lichu$ ruby script/console
Loading development environment.</p>

<blockquote>
  <blockquote>
    <p>20.days.from_now
    => Mon Sep 04 17:14:56 CST 2006
    

上面的例子中,我們先進到 dog 的檔案夾,然後再啟動 ruby script/console。 這時, Rails 的 class 會自動被載入記憶體當中,電腦才知道要怎麼處理 days.from_now 這個 method。 相同的,我自己在 “dog” 這個程式裡所新寫的 class 也會被載入 memory, 所以我也可以測試我自己寫出來的 class。

輸入 ruby script/console 之後,螢幕上出現了一串字 “Loading development environment”。 意思是 “載入開發的環境”。還記得 Rails 有三個主要的環境吧:開發,上線,跟測試。如果我們要的環境是”上線”環境的話,可以打

ruby script/console production

20.days.from_now, 也就是 20 天之後,就是 9/4 了。 如果是在 irb 裡頭打 20.days.from_now 的話,它會不知道你要做什麼:

wrl88-083:~/projects/dog lichu$ irb
irb(main):001:0> 20.days.from_now
NoMethodError: undefined method `days' for 20:Fixnum
        from (irb):1

這是因為 days.from_now 這個功能是 Rails 的 class 裡才有。 irb 只能接觸到 Ruby 的 class,所以無法執行 days.from_now。

看 params 裡的變數

除錯的步驟之一可看看傳送的變數是否正確。 如要看某一頁傳到下一頁的參數的話,可以在 view 裡打

<%= @params.inspect %>

或要看 session 的參數的話:

<%= @session.inspect %>

在下面的圖樣裡有一個 scaffold 產生的 view 檔叫 list.rhtml。 裡面有放 <%= @params.inspect %> 和 <%= @session.inspect %>:

伺服器在跑時網頁上就會出現:

圖樣裡也有顯示 debug 指令的功能。 要看某物件裡的參數,可用 debug 這著指令:

<%= debug(params) %>

其他可看的系統變數有 headers, params, request, 和 response

debug 也可以用來看任何物件裡的內容:

<%= debug(@order) %>

寫程式要解除常抓錯的困擾就是要常常執行寫過的碼,一出錯時才能很快的知道那裡要改喔。

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

| Powered by Wordpress Themes

Copyright © 本網站由臺灣國家高速網路與計算中心 格網技術組 贊助
2008 :)