2012-03-12 68 views
1

我想調試一堆重定向用戶的函數。我想在腳本運行時「殺死」腳本來讀取console.log()的輸出。我不能只使用簡單的return,因爲有很多功能可以一起工作。如何殺死一個JavaScript腳本?

+1

你試過alert()嗎? – 2012-03-12 02:21:39

+0

「許多共同工作的功能」在這裏沒有用處。他們如何加載?它們是否按設定的時間間隔到期它們是異步加載的嗎?他們是事件處理程序嗎? – ZJR 2012-03-12 02:22:13

回答

1

設定在要暫停在代碼當場斷點。如果在代碼中添加debugger statement,那麼支持它的瀏覽器將自動停止並打開調試器(實際上,我認爲某些瀏覽器(Chrome?)可能會忽略該語句,除非您已經打開了控制檯/ dev工具,但顯然是您只需要開啓開發工具即可)。

+0

如果控制檯沒有打開,Chrome肯定會忽略它。 IE可能也是如此;除非控制檯處於打開狀態,否則它將與'console'一起使用。 – 2012-03-12 02:34:03

1

有幾個選項,不是所有的人適用於您的情況:

  1. 拋出一個異常;這將停止函數和任何調用者函數;如ismaelga建議的那樣使用alert();
  2. 設置一個斷點,如nnnnnn建議;您可以使用debugger關鍵字或使用瀏覽器的GUI(如果存在);
  3. 重新定義console.log爲空函數;這種方式從此不會記錄任何東西,因此您可以閱讀迄今記錄的內容,而不受干擾。

某些情況下的選項將是不可能的:

  1. 如果您的代碼對事件作出響應,或使用像setInterval,即使「主循環」停止其他代碼仍然可以運行,記錄東西;
  2. 警報窗口可能會使查看日誌變得困難,這取決於您的瀏覽器有多麼突兀;
  3. 沒有合適的調試器,或者你不能安裝一個;
  4. 一些功能已存儲的console.log本地副本,所以重新定義它不會影響到他們。

在所有選項中,我會佔據第4位,因爲您可以平靜地閱讀您的日誌而不會「破壞」頁面。如果你想「過濾」日誌,你也可以使用一些函數調用「正確的」日誌(console.log的保存副本),而其他的調用「假的」日誌(你重新定義的那個)。

0

聲明全局變量,它是任何函數的外部,並且,檢查該變量的值,並且僅當該值設置以一定的方式進行,每個功能或長時間運行循環中添加代碼。通過這種方式,變量可以用作信號量,您可以從任何地方更改其值並根據其值終止所有處理。

例如,被初始化爲假,但可以設置爲true,讓所有功能知道要回來,所有迴路儘快打破了簡單的布爾變量叫stopProcessing。