Debugging — node --inspect, Chrome DevTools, breakpoint
Muammodan boshlaylik
Xato topish uchun ko'pchilik shunday qiladi:
console.log('bu yerga yetdimi?');
console.log('data:', data);
console.log('users:', users);
console.log('aaaa test test');
Bu ishlaydi — lekin sekin. Har safar kodni o'zgartirib, serverni qayta ishga tushirib, chiqishni o'qib... Ko'p vaqt ketadi. Va console.log qolgan bo'lsa produksiyaga ham chiqib ketishi mumkin.
Debugger bilan esa: dasturni istalgan qatorda to'xtatib, barcha o'zgaruvchilarni real vaqtda ko'rasiz, qadam-qadam oldinga olasiz — hech narsa o'zgartirmay.
node --inspect — asosiy kalit
Node.js da debugger o'rnatishga hojat yo'q — ichida bor. --inspect flagini qo'shsangiz yetarli:
node --inspect server.js
Terminal da shu chiqadi:
Debugger listening on ws://127.0.0.1:9229/f4f1...
For help, see: https://nodejs.org/en/docs/inspector
Server ishga tushdi: http://localhost:3000
9229 — debugger port. Chrome bu portga ulanib, dasturingizni boshqaradi.
Chrome DevTools bilan ulash
- Chrome da
chrome://inspectmanzilini oching - "Remote Target" bo'limida sizning
server.jsko'rinadi - "inspect" tugmasini bosing — DevTools ochiladi
Yoki to'g'ridan-to'g'ri: chrome://inspect → Open dedicated DevTools for Node
--inspect-brk — boshidan to'xtash
node --inspect-brk server.js
--inspect-brk — dastur birinchi qatorda to'xtaydi va siz ulangunicha kutadi. Ishga tushishi bilan darhol debug qilmoqchi bo'lsangiz shu flag.
Breakpoint — to'xtash nuqtasi
Breakpoint — siz dasturni "bu qatorda to'xta" deysiz. To'xtagan joyda barcha o'zgaruvchilarni ko'rasiz, ifodalarni hisoblaysiz, qadamba-qadam oldinlaysiz.
DevTools da breakpoint qo'yish
- DevTools → Sources tab
- Chap panelda fayl tanlang
- Qator raqamiga bosing — ko'k nuqta paydo bo'ladi → bu breakpoint
- So'rov yuboring — dastur o'sha qatorda to'xtaydi
debugger — kodda breakpoint
function narxHisobla(mahsulotlar) {
let jami = 0;
for (const m of mahsulotlar) {
debugger; // ← DevTools bu qatorda to'xtatadi
jami += m.narx * m.miqdor;
}
return jami;
}
debugger — dasturingiz kodida to'xtash nuqtasi. --inspect bilan ishga tushirilsa DevTools avtomatik to'xtaydi. --inspect bo'lmasa — debugger e'tiborga olinmaydi, dastur odatdagidek ishlaydi.
To'xtagandan keyin nima qilish mumkin
DevTools da to'xtaganda tepada boshqaruv tugmalari chiqadi:
▶ Resume — to'xtatishdan davom etish (keyingi breakpointga qadar)
⤼ Step Over — joriy qatorni bajarish, ichiga kirmay
↓ Step Into — funksiya ichiga kirish
↑ Step Out — joriy funksiyadan chiqish
⟳ Restart — dasturni qaytadan boshlash
⊘ Deactivate — barcha breakpointlarni o'chirish
Scope paneli — joriy o'zgaruvchilar:
- Local — joriy funksiya o'zgaruvchilari
- Closure — tashqi scope dan yopib olinganlar
- Global — global o'zgaruvchilar
Watch — istalgan ifodani kuzatish:
// Watch ga qo'shish:
mahsulotlar.length
jami > 1000
mahsulotlar.filter(m => m.narx > 100)
Console — to'xtaganda console da iboralar yozib hisoblash mumkin:
// To'xtaganda DevTools Console da:
> mahsulotlar
[{ narx: 25000, miqdor: 2 }, ...]
> mahsulotlar.reduce((s, m) => s + m.narx, 0)
75000
VS Code bilan debugging
VS Code — Node.js uchun eng qulay IDE debug muhiti. Chrome DevTools ochmasdan to'g'ridan-to'g'ri redaktorda debug qilasiz.
launch.json sozlash
.vscode/launch.json fayli yarating:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Server ishga tushir",
"program": "${workspaceFolder}/server.js",
"restart": true,
"runtimeExecutable": "node"
},
{
"type": "node",
"request": "attach",
"name": "Ishlab turgan serverga ulan",
"port": 9229,
"restart": true
}
]
}
launch — VS Code o'zi ishga tushiradi va debug qiladi.
attach — siz tashqarida node --inspect server.js ishga tushirasiz, VS Code unga ulanadi.
Ishlatish
F5→ VS Code server ni debug rejimda ishga tushiradi- Kod satriga bosib breakpoint qo'yasiz (qizil nuqta)
- So'rov yuborganda — to'xtatadi
F10— Step Over,F11— Step Into,Shift+F11— Step Out- Variables panelida barcha o'zgaruvchilar ko'rinadi
nodemon bilan birgalikda
{
"type": "node",
"request": "launch",
"name": "nodemon debug",
"runtimeExecutable": "nodemon",
"program": "${workspaceFolder}/server.js",
"restart": true,
"console": "integratedTerminal"
}
Fayl o'zgarganda nodemon qayta ishga tushiradi, VS Code esa avtomatik qayta ulanadi.
console metodlari — to'g'ri ishlatish
console.log dan tashqari boshqa foydali metodlar:
// Har xil darajalar
console.log('Oddiy ma\'lumot');
console.info('Axborot');
console.warn('Diqqat!'); // sariq rang (ba'zi terminallarda)
console.error('Xato!'); // qizil rang, stderr ga yozadi
// Ob'ektni chuqurroq ko'rsatish
const user = { id: 1, settings: { theme: 'dark', notifs: { email: true } } };
console.log(user); // [Object] — chuqur qismlari ko'rinmaydi
console.dir(user, { depth: null }); // ← to'liq, cheksiz chuqurlikda
// Vaqtni o'lchash
console.time('db so\'rovi');
await db.query('SELECT * FROM users');
console.timeEnd('db so\'rovi'); // "db so'rovi: 23.456ms"
// Jadval ko'rinishida
const foydalanuvchilar = [
{ id: 1, ism: 'Jasur', rol: 'admin' },
{ id: 2, ism: 'Malika', rol: 'user' },
];
console.table(foydalanuvchilar);
// ┌─────────┬────┬────────┬────────┐
// │ (index) │ id │ ism │ rol │
// ├─────────┼────┼────────┼────────┤
// │ 0 │ 1 │ 'Jasur'│'admin' │
// Chaqirilgan joy
console.trace('Bu yerdan chaqirildi');
// Trace: Bu yerdan chaqirildi
// at Object.<anonymous> (server.js:15:9)
// at ...
Tez-tez uchraydigan xatolar
Port band — debugger ulanmaydi
# 9229 port band bo'lsa
node --inspect=9230 server.js # ← boshqa port
# Kim 9229 ni ishlatayotganini topish
lsof -i :9229
kill -9 <PID>
debugger ishlamaydi
--inspect yoki --inspect-brk flag qo'yilmagan bo'lsa debugger e'tiborga olinmaydi. Yoki DevTools ulanmagan. Chrome da chrome://inspect ni tekshiring.
async funksiya ichida breakpoint ishlamaydi
Async funksiyalarda to'xtatilganda Step Into kutilmagan joyga o'tishi mumkin. Buning o'rniga await ning keyingi qatoriga alohida breakpoint qo'ying.
Xulosa
Debugger — console.log dan ko'ra kuchliroq va tezroq vosita. Bir marta o'rgansangiz, debugging vaqtingizni ikki baravarga qisqartiradi.
Eslab qoling:
node --inspect server.js— debug rejimda ishga tushirishnode --inspect-brk server.js— birinchi qatorda to'xtatib kutishchrome://inspect— Chrome bilan ulashdebugger— kodda to'xtash nuqtasi- VS Code
launch.json— to'g'ridan-to'g'ri redaktorda debug F5ishga tushirish,F10qadam,F11ichiga kirishconsole.time/timeEnd— ishlash vaqtini o'lchashconsole.table— massivlarni jadvalda ko'rish
Keyingi dars
27-dars: Environment Variables — dotenv, process.env, konfiguratsiya boshqarish