Debug dengan debugger bawaan Node.js

Selesai

Penelusuran kesalahan adalah aplikasi multistage yang biasanya mengikuti langkah-langkah berikut:

  1. Identifikasi bug dalam program Anda.
  2. Temukan di mana bug berada di kode Anda.
  3. Analisis mengapa bug terjadi.
  4. Perbaiki bug.
  5. Validasi bahwa perbaikan Anda berfungsi.

Setelah mengidentifikasi kesalahan dalam program Node.js, tantangan pertama yang akan Anda hadapi adalah menemukan lokasi kesalahan dalam kode Anda. Untuk mencapai itu, salah satu cara paling efisien adalah menjalankan kode Anda langkah demi langkah untuk mendapatkan gambaran tentang di mana hal-hal yang salah.

Titik henti

Menjalankan semua kode Anda langkah demi langkah mungkin sangat tidak efisien jika program Anda memiliki ribuan baris kode. Dalam hal ini, Anda dapat menggunakan titik henti. Ini memungkinkan Anda untuk memutuskan dari eksekusi normal program Anda dan menjeda pada titik tertentu dalam kode Anda.

Dengan menggunakan titik henti, Anda dapat membuat program berjalan normal hingga Mencapai bagian kode penting tempat Anda mencurigai kesalahan tersebut berada. Kemudian Anda dapat beralih ke menjalankan langkah demi langkah.

Ada beberapa cara untuk menentukan titik henti dalam kode Anda berdasarkan debugger dan editor kode Anda.

Node.js mode inspeksi

Karena debugger memiliki akses penuh ke lingkungan eksekusi, aktor jahat juga dapat menggunakannya untuk menyuntikkan kode arbitrer di aplikasi Node.js Anda. Itu sebabnya, secara default, Node.js tidak memungkinkan Anda untuk men-debug program yang sedang berjalan. Anda harus mengaktifkan mode khusus yang disebut mode inspektur untuk memungkinkan penelusuran kesalahan.

Anda perlu memulai aplikasi dengan --inspect opsi untuk memungkinkan klien debugger melampirkan dirinya ke aplikasi dan mengontrol eksekusi aplikasi Anda.

Secara default, ketika Node.js dimulai dengan --inspect opsi , ia mendengarkan pada host 127.0.0.1 di port 9229. Anda juga dapat menentukan host dan port ubahsuaian dengan menggunakan sintaks --inspect=<HOST>:<PORT>.

Penting

Hindari mengikat port debugger Node.js ke alamat IP publik atau ke 0.0.0.0. Jika tidak, setiap klien yang dapat terhubung ke alamat IP Anda berpotensi terhubung dan mengontrol aplikasi Node.js Anda. Dengan demikian, penyerang dapat menjalankan kode arbitrer dari jarak jauh pada lingkungan eksekusi Anda. Tindakan ini dapat menyebabkan pelanggaran keamanan yang berpotensi parah.

Sebagai alternatif, Anda dapat menggunakan opsi --inspect-brk. Ini bekerja sama dengan --inspect, tetapi melanggar eksekusi kode tepat sebelum awal kode Anda. Ini memungkinkan Anda untuk melampirkan debugger dan meluangkan waktu Anda untuk mengatur titik henti dan melangkah melalui kode Anda untuk mengidentifikasi akar penyebab masalah. Gunakan sakelar ini --inspect-brk saat Anda perlu men-debug:

  • Sebuah kondisi balapan.
  • Masalah terputus-terputus yang sulit untuk direprodusi.

Setelah aplikasi Anda dimulai dengan mode inspeksi diaktifkan, Anda dapat menggunakan klien debugger yang kompatibel untuk terhubung ke proses aplikasi Anda.

Klien debugger

Untuk men-debug aplikasi, Anda perlu menggunakan klien debugger. Klien debugger adalah program yang terhubung ke aplikasi Node.js Anda dan memungkinkan Anda mengontrol eksekusinya. Ada banyak klien debugger yang tersedia, tetapi yang paling umum adalah:

  • Visual Studio Code: Klien debugger grafis yang dilengkapi dengan Visual Studio Code. Gunakan ini saat penelusuran kesalahan selama pengembangan.
  • node-inspect: Klien debugger baris perintah yang dibundel dengan Node.js. Gunakan ini saat penelusuran kesalahan dalam produksi.

Debugger bawaan

Anda dapat menggunakan klien debugger baris perintah, yang dibundel dengan Node.js, untuk men-debug aplikasi Node.js Anda. Ini adalah debugger sederhana yang memungkinkan Anda mengatur titik henti dan menjalankan kode Anda langkah demi langkah.

node inspect <YOUR_SCRIPT>.js

Debugger pemeriksaan simpul menjalankan Node.js dengan mode inspeksi diaktifkan dan diluncurkan pada saat yang sama dengan debugger interaktif terintegrasi. Ini menjeda eksekusi tepat sebelum kode Anda dimulai. Anda akan melihat perintah debugger yang menunjukkan bahwa perintah telah berhasil diluncurkan.

node inspect myscript.js
< Debugger listening on ws://127.0.0.1:9229/ce3689fa-4433-41ee-9d5d-98b5bc5dfa27
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in myscript.js:1
> 1 const express = require('express');
  2
  3 const app = express();
debug>