Sparround

Debugging texnikaları

Debugging təsadüfi console.log səpmək deyil — axtarış sahəsini ardıcıl daraltmaqdır. Test düşəndə suallara bu sırada cavab ver:

1. Nə düşdü? Assertion, yoxsa kodun özü? Assertion xətası "məhsul gözləniləndən fərqlidir" deməkdir; TypeError/undefined isə test kodunun öz problemidir. 2. Harada düşdü? Stack trace-in SƏNİN kodundakı ən yuxarı sətri — framework sətirlərini keç. 3. Hansı data ilə? O anda dəyişənlərin real dəyəri nədir — çap et və ya breakpoint qoy. 4. Həmişəmi düşür? Təkrar işlət (--repeat-each). Hər dəfə düşürsə real bug; bəzən düşürsə flakiness (vaxt, sıra, paylaşılan state). 5. Hər yerdəmi düşür? Lokalda keçib CI-da düşürsə fərq mühitdədir: timezone, locale, ekran ölçüsü, sürət, data.

Bu ardıcıllığı interview-də səsləndirmək özlüyündə güclü cavabdır — namizədin sistemli düşündüyünü göstərir.

AlətNə üçünQeyd
console.logsadə dəyər və ya axının yoxlanmasıobyekt massivlərində oxunmaz olur
console.table(arr, ['id','status'])obyekt massivini cədvəl kimi göstərirAPI cavablarını yoxlamaq üçün ideal
console.dir(obj, { depth: null })iç-içə strukturu tam açırNode adi log-da dərinliyi kəsir
console.time / timeEndaddımın nə qədər çəkdiyini ölçüryavaş testin səbəbini tapmaq üçün
breakpoint (VS Code)icranı dayandırıb bütün dəyişənləri görməklog-dan qat-qat sürətlidir
Playwright trace viewerhər addımın DOM, şəbəkə və konsoluCI-dakı fail üçün əsas alət

Breakpoint-lər və debugger-lər. VS Code-da sətir nömrəsinin solunda klikləyib breakpoint qoyursan, sonra testi debug rejimində işlədirsən — icra həmin sətirdə dayanır və bütün dəyişənlərin real dəyərini, çağırış stack-ini, hətta konsolda ifadə hesablamağı görürsən.

Faydalı növlər:

  • Conditional breakpoint — yalnız şərt ödənəndə dayanır (orderId === '1042'); 500 elementli dövrədə əvəzsizdir
  • Logpoint — dayanmadan mesaj yazır; kodu dəyişmədən "console.log" effekti verir
  • Caught/uncaught exception breakpoint-i — xəta atılan anda dayanır

Node üçün ümumi mexanizm: node --inspect-brk script.js prosesi başlanğıcda dayandırır və debugger-in qoşulmasını gözləyir; sonra chrome://inspect və ya VS Code-un "Attach to Node Process" əmri ilə qoşulursan. Playwright-ın öz qısa yolu isə npx playwright test --debug (Inspector) və koddakı await page.pause()-dur.

Stack trace-i oxumaq — ən çox qazandıran bacarıqlardan biridir və interview-də tez-tez yoxlanılır. Qayda: birinci sətir xətanın TİPİ və mesajıdır; sonrakı sətirlər isə çağırış zənciridir — yuxarıdan aşağı: harada partladı → onu kim çağırdı. node_modules sətirlərini keç, gözünü SƏNİN faylların olan ilk sətrə sal — problem demək olar həmişə oradadır.

Asinxron kodda stack trace qısa və faydasız görünə bilər (at processTicksAndRejections), çünki xəta orijinal çağırışdan ayrı bir tick-də baş verir. Bunun ən çox rast gəlinən səbəbi unudulmuş await-dir: await əlavə etmək həm bug-ı düzəldir, həm də stack trace-i oxunaqlı edir. new Error(msg, { cause: originalError }) ilə xətanı zənginləşdirmək də konteksti saxlayır.

📚 Mənbələr və sənədlər