簡體   English   中英

Javascript調試

[英]Javascript debugging

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

另外,firebug仍然被認為是“最好的”調試器(我自己在safari / chrome中看不到firebug和web dev工具之間的差異)。

星期天怎么樣!

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

至於殺死無盡循環的方法。 有些瀏覽器會阻止這種情況發生。 但是,我仍然喜歡只使用ctrl + w ,但這仍然會關閉標簽。

您可以查看其他一些替代方案:

歌劇:蜻蜓

Safari / Chrome:Web Inspector

雖然,Opera有一套很好的開發者工具,我發現它們非常有用。 (工具 - >高級 - >開發人員工具)

如果您不想輸入代碼以顯式退出,請嘗試使用條件斷點。 如果您打開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";
        }
    }
};

編輯:我剛剛想到,因為您是唯一使用此腳本的人,所以Web工作人員是理想的解決方案。

您看到的基本問題是,當JS進入無限循環時,它會阻止瀏覽器,使其無法響應您通常用於停止執行的任何事件。 Web工作人員的速度仍然很快,但他們會讓您的瀏覽器無負擔,並且事件正常發生。 我們的想法是將您的高需求任務(在本例中為您的Euler問題算法)傳遞給Web worker JS文件,該文件在其自己的線程中執行,並且僅在主瀏覽器不需要時才占用CPU資源。 最終結果是您的CPU仍然像現在一樣高峰,但您的瀏覽器保持快速響應。

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

雖然使用Firebug或webkit調試器很好,但瀏覽器看起來似乎是Project Euler的開銷。 為什么不使用像RhinoV8這樣的運行時?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM