Questions? (+84) 247 300 6665 or hr@hri.com.vn

Gỡ lỗi với Node.js

12/09/2019

Gỡ lỗi là một phần quan trọng của chu trình phát triển cũng như những thứ khác. Vì vậy, hãy luôn luôn hiểu rõ chức năng của việc gỡ lỗi, làm cho nó dễ dàng và ít tốn thời gian hơn, từ đó chúng ta có thể kết thúc công việc đúng giờ và giảm bớt căng thẳng.

Sử dụng trình gỡ lỗi

Node.js bao gồm một công cụ gỡ lỗi độc lập (out-of-process), đầy đủ chức năng (full-featured) có thể được truy xuất thông qua một giao thức dựa trên TCP và tích hợp trình gỡ lỗi client.

Ví dụ, sử dụng trình gỡ lỗi để gỡ lỗi một tập tin có tên là script.js, bạn có thể chỉ cần gọi node sử dụng tham số debug như sau:

1
2
3
4
$ node debug script.js
< debugger listening on port 5858
connecting... ok
debug>

Breakpoint

Bây giờ thì bạn đã bắt đầu một phiên gỡ lỗi, ở bất cứ đâu trong script của bạn, khi bạn gọi degugger thì đó sẽ là một breakpoint cho trình gỡ lỗi.

Ví dụ, hãy thêm một câu lệnh debugger vào script.js:

1
2
3
4
5
6
foo = 2;
setTimeout(() => {
debugger;
console.log('bugger');
}, 1000);
console.log('de');

Bây giờ, nếu chúng ta chạy script này thì trình gỡ lỗi sẽ được gọi trên breakpoint của chúng ta và chúng ta có thể kiểm soát script thông qua việc sử dụng lệnh cont hoặc next (c hoặc n cho ngắn).

Chúng ta có thể dừng thực thi script bất kỳ lúc nào bằng cách sử dụng p


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
303
$ node debug script.js
< debugger listening on port 5858
connecting... ok
break in /home/tom/web/envatodebug/myscript.js:1
1 foo = 5;
2 setTimeout(() => {
3   debugger;
debug> cont
< de
break in /home/tom/web/envatodebug/myscript.js:3
1 foo = 5;
2 setTimeout(() => {3   debugger;
4   console.log('bugger');5 }, 1000);
debug> next
break in /home/tom/web/envatodebug/myscript.js:42 setTimeout(() => {
3   debugger;
4   console.log('bugger');
5 }, 1000);
6 console.log('de');
debug> next
< bugger
break in /home/tom/web/envatodebug/myscript.js:5
3   debugger;
4   console.log('bugger');
5 }, 1000);
6 console.log('de');
7
debug> quit

REPL

1
2
3
4
5
6
7
8
9
$ node debug script.js
< debugger listening on port 5858
connecting... ok
debug> repl
Press Ctrl + C to leave debug repl
> foo
2
> 2+2
4

Read-Eval-Print-Loop của trình gỡ lỗi cho phép bạn nhập code tương tác trong suốt quá trình thực thi và từ đó truy xuất trạng thái của ứng dụng và tất cả các biến và phương thức của nó tại điểm thực thi của breakpoint. Đây là một công cụ rất mạnh mẽ mà bạn có thể sử dụng để nhanh chóng lọc ứng dụng của bạn.

Nói chung, REPL có sẵn như là một tính năng độc lập và là một phần của trình gỡ lỗi, và nó cho phép bạn chạy JavaScript tương tác. Ví dụ, chỉ cần gõ node tại dấu nhắc không có tuỳ chọn, và bạn sẽ được cung cấp một giao diện REPL mà bạn có thể viết mã vào đó và nhìn thấy đầu ra.

Step In và Step Out

Trước đó tôi đã đề cập lệnh cont và next (c và n), cho phép chúng ta tiếp tục thực thi code một khi đã đạt đến một breakpoint. Ngoài điều này, khi chúng ta đi qua các code, chúng ta cũng có thể step in đến một phương thức hoặc step out ra ngoài phạm vi của cha nó.

Sử dụng lệnh step để step in và out để step out, hoặc ngắn gọn s và o.

Backtracing

Sử dụng backtrace hoặc bt để lấy một đầu ra của backtrace cho frame thực thi hiện tại.

Khởi động lại

Sử dụng restart hoặc r để khởi động lại script của bạn từ lúc bắt đầu thực thi.

Những cách khác để kết nối với trình gỡ lỗi

Những người dùng cao cấp có thể đồng thời truy xuất đến trình gỡ lỗi bằng cách khởi động Node.js với tham số --debug, hoặc bằng cách ra hiệu cho một tiến trình Node.js với SIGUSR1.

Một khi một tiến trình đã được thiết lập vào trong chế độ gỡ lỗi bằng cách này, thì sau đó nó có thể được kết nối tới bằng cách sử dụng trình gỡ lỗi Node.js sử dụng pid của tiến trình đang chạy hoặc thông qua một tham chiếu URI (ví dụ localhost:port) để kết nối đến trình gỡ lỗi đang lắng nghe:

  • node debug -p <pid> kết nối đến tiến trình thông qua pid.
  • node debug <URI> kết nối đến tiến trình thông qua URI chẳng hạn như localhost:5858.

Sử dụng Node Inspector

Ngoài công cụ gỡ lỗi CLI (Giao diện dòng lệnh), Node Inspector cũng cung cấp một GUI (Giao diện đồ hoạ) bên trong trình duyệt (hiện chỉ hỗ trợ Chrome và Opera).

Để sử dụng trình gỡ lỗi, chỉ cần cài đặt như sau:

npm install -g node-inspector

Bây giờ thì chúng ta đã cài đặt Node Inspector, chúng ta có thể gỡ lỗi tập tin script.js của chúng ta với:

node-debug script.js

Bây giờ shell của bạn sẽ xuất ra như sau, và mở trình duyệt web truy cập đến URL nếu bạn cài đặt Chrome hay Opera thành trình duyệt mặc định t

rên hệ điều hành của bạn.

1. Node Inspector is now available from http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858
2. Debugging `script.js` 
3. Debugger listening on port 5858

Trong trình duyệt web của bạn, bây giờ bạn sẽ có thể gỡ lỗi ứng dụng của bạn trong một môi trường tương tự với developer tools. Thiết lập các breakpoint và xem code hiện được tích hợp với trình duyệt của bạn. Hãy tận hưởng!

Kết luận

Việc gỡ lỗi không còn là cơn ác mộng, hay gây căng thẳng nữa.

Thiết lập breakpoint và stepping qua code là quá đơn giản trong Node. Nó là một trải nghiệm tương tự như Ruby, và nếu bạn đang cố gắng hiểu một ứng dụng cho trước, thì hãy mở ứng dụng trong chế độ gỡ lỗi và tạm ngưng thực thi là một cách tuyệt vời để tìm hiểu trong một khung thời gian nhanh chóng.

Share this job
BACK TO BLOG