Đối với mã Node.js nhỏ, bạn có thể sử dụng các hàm console.log() hoặc console.debug() để hiển thị các thông điệp hoặc giá trị của biến một cách định kỳ nhằm gỡ lỗi mã một cách thủ công. Tuy nhiên, nếu mã Node.js trở nên lớn hơn và phức tạp hơn, phương pháp thủ công sẽ không còn hữu ích. Thay vào đó, chúng ta có thể sử dụng trình gỡ lỗi tích hợp sẵn trong môi trường chạy Node.js.
Xem xét một đoạn mã Node.js đơn giản như sau (main.js) −
let marks = [34, 45, 98, 26, 51]; let total = 0; for (let i = 0; i <= marks.length; i++) { total += marks[i]; } var no = marks.length; console.log(total/no);
Chúng tôi mong rằng chương trình trên sẽ tính toán điểm trung bình của 5 sinh viên. Tuy nhiên, kết quả không như mong đợi khi chúng tôi chạy nó như sau −
PS D:\nodejs> node main.js NaN
Trong JavaScript, NaN có nghĩa là Không phải là một số. Để theo dõi lỗi này, hãy sử dụng trình gỡ lỗi Node.js. Thay vào đó, hãy chạy chương trình với lệnh sau −
PS D:\nodejs> node inspect main.js < Debugger listening on ws://127.0.0.1:9229/ca4aece6-308a-4979-8a32-734fe8ebbd0b < For help, see: https://nodejs.org/en/docs/inspector < connecting to 127.0.0.1:9229 ... ok < Debugger attached. < Break on start in a.js:1 > 1 let marks = [34, 45, 98, 26, 51]; 2 3 let total = 0; debug>
Trình gỡ lỗi tích hợp sẵn bắt đầu tại cổng 9229 của localhost. Trình gỡ lỗi sẽ dừng lại ở dòng đầu tiên trong mã.
Chúng ta bước qua mã bằng cách yêu cầu trình gỡ lỗi (debugger) đi đến dòng tiếp theo mà chương trình sẽ thực thi. Node.js cho phép sử dụng các lệnh sau để sử dụng trình gỡ lỗi −
Sr.No | Commands & Description |
---|---|
1 | c or cont Continue execution to the next breakpoint or to the end of the program. |
2 | n or next Move to the next line of code. |
3 | s or step Step into a function. By default, we only step through code in the block or scope we’re debugging. |
4 | o Step out of a function. After stepping into a function, the debugger goes back to the main file when the function returns. |
5 | pause Pause the running code. |
Nhấn ‘n’ hoặc ‘next’ liên tiếp để duyệt qua mã. Trong vòng lặp này, hai biến được thay đổi trong mỗi lần lặp—total và i. Hãy thiết lập các trình theo dõi cho cả hai biến đó.
debug> watch('total') debug> watch('i')
Khi bạn nhấn 'n' trước dấu nhắc gỡ lỗi, bạn sẽ thấy giá trị tức thời của hai biến đang được theo dõi.
break in main.js:6 Watchers: 0: total = 0 1: i = 0 4 5 > 6 for (let i = 0; i <= marks.length; i++) { 7 total += marks[i]; 8 }
Mỗi khi bạn nhấn next, các giá trị thay đổi hoặc tổng và tôi sẽ được hiển thị trong trình gỡ lỗi.
Tại lần lặp cuối cùng, trạng thái của trình gỡ lỗi là −
Watchers: 0: total = 254 1: i = 5 4 5 > 6 for (let i = 0; i <= marks.length; i++) { 7 total += marks[i]; 8 }
Lần tới, giá trị của tổng trở thành NaN vì vòng lặp đang cố gắng vượt quá mảng.
Watchers: 0: total = NaN 1: i = 6 4 5 > 6 for (let i = 0; i <= marks.length; i++) { 7 total += marks[i]; 8 }
Do đó, chúng ta có thể nhận thấy rằng lỗi nằm ở việc cấu trúc vòng lặp for. Trình gỡ lỗi tích hợp giúp xác định lỗi.
Bạn cũng có thể bật gỡ lỗi mã Node.js bên trong VS Code. Mở bảng lệnh bằng cách nhấn ctrl+shift+p và chọn Đính kèm quy trình Node.JS. Sau đó, bắt đầu gỡ lỗi chương trình từ menu Chạy. Nó cho phép bạn thực hiện các thao tác Bước qua, Bước vào và Bước ra trong mã để theo dõi luồng của chương trình. Bạn cũng có thể đặt theo dõi trên một hoặc nhiều biến để theo dõi giá trị trong khi chương trình đang được thực thi từng bước.