2010-09-19 57 views
3

我最近開始修補Project Euler問題,並嘗試在Javascript中解決它們。這樣做,我傾向於產生許多無限循環,現在我想知道是否有更好的方法來終止腳本,而不是在Firefox或Chrome中查殺選項卡?Javascript調試

而且,是螢火蟲仍然被認爲是「最好的」調試器(我自己,我不能看到Safari /鉻螢火蟲和Web開發工具多大區別)。

任何一個愉快的星期天都有什麼!

+2

你如何定義「最佳」? Firebug爲您提供幾乎所有標準調試器所需的功能,如單步執行代碼,斷點等。 – rkg 2010-09-19 08:14:50

+0

使用瀏覽器作爲ide的想法,您可以在其中進行模擬,這真的很酷!爲了好玩,我還在JavaScript中實現了一個頻道編碼器(編碼理論)。我發現Opera的運行速度最快,到目前爲止您的體驗如何? – ustun 2010-09-19 15:07:35

+0

大多使用螢火蟲,因爲即時通訊在Linux上。工作正常,但當它掛起它可以得到技巧凌亂。 – Buzzzz 2010-09-20 13:34:31

回答

0

如果您不想顯式退出代碼,請嘗試使用條件斷點。如果您打開Firebug的腳本控制檯並右鍵單擊代碼旁邊的裝訂線,它將插入一個斷點併爲您提供觸發斷點的選項以滿足某些條件。例如,如果你的代碼是這樣的:

var intMaxIterations = 10000; 
var go = function() { 
    while(intMaxInterations > 0) { 
     /*DO SOMETHING*/ 
     intMaxIterations--; 
    } 
}; 

...你既可以等待循環的所有10,000次重複完成,或者你可以把一個條件斷點某處內環路和指定條件intMaxIterations < 9000。這將允許循環內的代碼運行1000次(實際上,實際上是1001次)。此時,如果你願意,你可以刷新頁面。

但是,一旦腳本進入無限循環(無論是因失誤或設計),有沒有很多可以做,我知道的,從繼續停止它,如果你還沒有爲此做好了準備。這通常是爲什麼當我做大量遞歸時,我會限制特定代碼塊的運行次數。有很多方法可以做到這一點。如果您認爲該行爲是一個實際的錯誤,請考慮拋出它。例如。

var intMaxIterations = 10000; 
var go = function() { 
    while(true) { 
     /*DO SOMETHING*/ 
     intMaxIterations--; 

     if (intMaxIterations < 0) { 
      throw "Too many iterations. Halting"; 
     } 
    } 
}; 

編輯: 它只是發生,我認爲是因爲你使用這個腳本的唯一的人,網絡工作者是理想的解決方案。

你看到的基本問題是,當JS進入無限循環,它會阻止瀏覽器,留下反應遲鈍,你通常會用停止執行的任何事件。網絡工作者仍然是一樣快,但他們讓瀏覽器不受負擔,事件正常啓動。這個想法是,您將高需求任務(在這種情況下爲您的歐拉問題算法)傳遞給Web Worker JS文件,該文件在其自己的線程中執行,並且僅在主瀏覽器不需要時才佔用CPU資源。最終的結果是,你的CPU仍然像現在這樣,但你的瀏覽器保持快速和響應。

這是第一次建立網絡工作者的有點害蟲,但在這種情況下,你只需要做一次。如果你的算法永遠不會返回,只需點擊按鈕並殺死工作線程。有關更多信息,請參閱MDC上的Using Web Workers

+0

好吧,我猜,我必須學會不發現新的方式來做無限循環似乎;)。 – Buzzzz 2010-09-19 11:51:00

+0

那麼,你可以做的另一件事是創建一個鍵盤事件,它設置你的代碼查找的值。當條件滿足時,您可以退出或拋出異常。問題在於,通常鍵盤迴調在隊列中如此之低,以至於殺死瀏覽器通常會更快。 – Andrew 2010-09-19 12:06:02

+0

感謝您接受我的回答。我已經添加了一條您可能想要閱讀的有關使用網絡工作人員的說明。這可能正是你需要的。加上它非常尖端,總是很酷。 – Andrew 2010-09-19 15:03:49

1

Firebug仍然是我個人的首選工具。

至於一種殺死你的無盡循環的方式。有些瀏覽器會阻止這種情況發生。不過,我仍然寧願只是去ctrl + w,但這仍然關閉選項卡。

一些其他的替代品,你可以看看:

歌劇:蜻蜓

Safari /鉻:Web檢查

雖然,Opera有一個很好的一套開發工具,我發現很有用。 (工具 - >高級 - >開發工具)

+0

我主要使用Firefox或Safari,但IE中的開發人員工具出奇的好,儘管你仍然需要使用Fiddler來監視文件請求。我不會使用IE來處理執行時間是這樣的問題的任何JS,但是對於一般的Web調試來說,這是相當不錯的。 – Andrew 2010-09-19 12:09:59

0

雖然Firebug或webkit調試器很不錯,但瀏覽器看起來像是Project Euler的東西。爲什麼不使用像RhinoV8這樣的運行時間?

+0

嗯,但我真的很喜歡調試器,我想那個node.js沒有(或者可以在瀏覽器之外沒有node.js的情況下運行V8)? – Buzzzz 2010-09-19 11:49:19