在寫 node 應用或者 react 應用時,常常須要看一些庫的源碼,而在看源碼時,除了一個順手的 IDE 外,學會調試也相當重要。所以,我把常見的調試的一些小問題記錄下來。javascript
當函數返回的是一個表達式時,如何在 debug 中,在當前函數中獲取到返回值java
以下例所示,如何在 sum
函數中經過調試獲得 7
,而非獲取到 a
和 b
再二者相加node
function sum (a, b) {
// 在調試中如何獲得 7 這個結果
return a + b
}
sum(3, 4)
複製代碼
Step Over
是跳過一行仍是一個表達式?// 當此行有斷點時,Step Over 進入哪裏
const l = [1, 2, 3, 4, 5].map(x => sum(x, 1)).filter(x => x > 3)
const n = sub(sum(3, 4), 1)
複製代碼
(不經過對指定函數起始位置打斷點的方法,由於有時沒法得知指定函數位置)react
// 如何進入到 `.filter` 函數中進行調試
const l = [1, 2, 3, 4, 5].map(x => sum(x, 1)).filter(x => x > 3)
// 如何進入到 sub 函數中進行調試
const n = sub(sum(3, 4), 1)
複製代碼
// 如何在 map 函數中,當 x === 3 時打斷點
const = [1, 2, 3, 4, 5].map(x => sum(x, 1))
複製代碼
await
的函數中進行調試?sum
函數和 asyncSum
函數 Step Into
的步驟是否一致?function sum (a, b) {
return a + b
}
async function asyncSum (a, b) {
return a + b
}
async function main () {
const sum = await sum(3, 4)
const asyncSum = await sum(3, 4)
return sum
}
複製代碼
promise.then
函數中進行調試?(不經過直接打斷點)Promise.resolve(3).then(o => {
// 如何 StepOver/StepInto 到當前行進行調試
console.log(o)
})
console.log('hello, world')
複製代碼
async_hooks
是什麼關注公衆號山月行,記錄個人技術成長,歡迎交流promise