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