除錯 node.js 程式
在程式開發中,如何快速的查找定位問題是一項非常重要的基本功,在實際開發程序中,或多或少都會遇到程式出現問題導致無法正常運行的情況,因此,除錯代碼就變成了一項無法避免的作業,這里簡單介紹下如何除錯 node.js 程式,
使用 console.log
Node 提供了全域的 console 物件,該物件可以輸出格式化的字串,
console.log 是除錯 Node 模塊最簡單的工具,console.log 主要有兩個作用:一是將物件序列化為一個字串,另一個是向標準輸出流輸出結果,
使用 console.log 檢查物件:
const obj = {
a: 1,
b: 2
}
console.log(obj)
這段代碼將列印出以下資訊:
{ a: 1, b: 2 }
注意:實質上 console.log 沒有進行任何格式化操作,而是 console.log 內部呼叫了 util.format 將傳入的引數格式化,并且將結果輸出到標準輸出流中,
console.log 函式只檢查物件的自有可列舉屬性,即在原型鏈上的屬性以及不可列舉的屬性都不會顯示,
例如:
const obj = Object.defineProperty({
a: 1,
b: 2
}, 'a', {
enumerable: false
})
console.log(obj)
不可列舉屬性 a 不會顯示,這段代碼將列印出以下資訊:
{ b: 2 }
console.log 函式可以通過 util.format 函式提供向字串中插入數值的能力,在字串中使用 % 前綴作占位符,
例如:
console.log('an object: %j', {a: 1, b: 2})
這段代碼將列印出以下資訊:
an object: {"a":1,"b":2}
%j 是一個 JSON 占位符,即如果引數包含回圈參考,則替換為字串 '[Circular]',
當然除了 console.log 函式,還可以使用 console 物件的其他函式除錯代碼,例如:console.error、console.table、console.info等等,
注意:在 Node 中,如果向行程的輸出流中寫入資料是一種阻塞操作,寫入記錄時會阻塞事件循壞,因此,在實際專案中應避免使用 console.log,
使用 debugger 除錯器
使用 console.log 檢查變數雖然簡單易用,但它也有很糟糕的一面,在復雜程式中很難定位和發現問題,程式輸出冗長,阻塞事件回圈等,
慶幸的是,V8 引擎匯出了一個支持 Node 的除錯介面,因此,可以使用 Node 內置的除錯器除錯你的程式,
創建一個錯誤的程式:
var n = 0
function init () {
n = 1
}
function incr () {
var n = n + 1
}
init()
console.log('n before: %d', n)
incr()
console.log('n after: %d', n)
運行程式,輸出結果如下:
n before: 1
n after: 1
變數 n 并沒有如期遞增,接下來使用除錯模式啟動 Node 除錯程式:
node --inspect index.js
這樣就會以除錯模式啟動 Node,可以看到除錯器的提示資訊如下:
Debugger listening on ws://127.0.0.1:9229/a94b1d29-81cb-461b-8abc-f1bf87c767b1
For help, see: https://nodejs.org/en/docs/inspector
n before: 1
n after: 1
除錯的程式代碼非常少,所以除錯立即就完成結束了,
可以通過命令在程式第一行設定斷點:
node --inspect-brk index.js
除錯器提示資訊如下:
Debugger listening on ws://127.0.0.1:9229/def735ed-3a2a-4772-a40d-077939e76b83
For help, see: https://nodejs.org/en/docs/inspector
這樣除錯就不會立即結束,
接著,打開 Chrome 瀏覽器,在地址欄輸入:
chrome://inspect/#devices
在界面 Remote Target 標簽內容中找到要除錯的目標(Target)檔案,點擊目標中的 inspect 鏈接就可以進入瀏覽器除錯面板除錯程式了,接下來的除錯操作方式和平時除錯普通 JavaScript 代碼一樣,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/136698.html
標籤:JavaScript
上一篇:前端經典面試題解密-add(1)(2)(3)(4) == 10到底是個啥?
下一篇:js語法筆記
