Gỡ lỗi và kiểm tra JavaScript trong các ứng dụng HTML5. Hướng dẫn chi tiết gỡ lỗi mã JavaScript trong Chrome Devtools. trình gỡ lỗi từ khóa

Chúng tôi cho bạn biết cách sử dụng bảng điều khiển Nhà phát triển Chrome công cụ thuận tiện cho việc gỡ lỗi.

Việc tìm và sửa lỗi có thể khó khăn đối với người mới bắt đầu. Nếu bạn đang nghĩ đến việc sử dụng console.log() để gỡ lỗi mã của mình Quyết định tốt nhất, thì bạn đã sai rồi.

Trong bài viết này chúng ta sẽ nói về công cụ tuyệt vời Google Chrome Devtools để gỡ lỗi Quá trình này là một cách hiệu quả hơn nhiều để giải quyết vấn đề này.

Đây chỉ là một ví dụ đơn giản về cách sử dụng tính năng gỡ lỗi nhưng nó có thể được áp dụng cho bất kỳ vấn đề nào.

Bước 1: Tái tạo lỗi

Tái tạo lỗi luôn là bước đầu tiên để gỡ lỗi. Điều này có nghĩa là tìm chuỗi hành động dẫn đến lỗi. Quá trình này có thể kéo dài, vì vậy hãy cố gắng tối ưu hóa nó.

Để tự mình làm theo các bước trong hướng dẫn này, hãy làm như sau:

  • Đây là trang web chúng ta sẽ làm việc trong hướng dẫn này. Đừng quên mở nó trong tab mới;
  • Nhập số 5 vào trường “Số 1”;
  • Nhập số 1 vào trường “Số 2”;
  • Nhấp vào nút “Thêm”;
  • Hãy nhìn xem, họ nói với bạn rằng 5+1=51;

Rất tiếc, điều đó rõ ràng là sai. Kết quả phải là số 6 và lỗi này cần được sửa.

Bước 2: Tạm dừng thực thi bằng điểm dừng

DevTools cho phép bạn dừng quá trình thực thi mã và xem giá trị của tất cả các biến tại thời điểm đó. Công cụ tạm dừng mã được gọi là điểm dừng. Thử:

  • Quay lại trang thử nghiệm của chúng tôi và bật DevTools bằng cách nhấn Cmd + Option + I (Mac) hoặc Ctrl + Shift + I (Windows, Linux);
  • Chuyển đến tab "Nguồn";
  • Mở rộng "Trình nghe sự kiện". DevTools sẽ mở rộng danh sách các danh mục sự kiện như hoạt ảnh và khay nhớ tạm;
  • Đánh dấu vào ô “nhấp chuột”;
  • Quay lại trang, thêm lại “Số 1” và “Số 2”. DevTools sẽ tạm dừng bản demo và đánh dấu dòng mã trong bảng Nguồn. DevTools sẽ đánh dấu dòng mã này:

    hàm onClick() (

    hàm onClick() (


    Tại sao chuyện này đang xảy ra?

    Khi bạn chọn "nhấp chuột", bạn đặt điểm dừng phụ thuộc vào sự kiện nhấp chuột trên mỗi thành phần có trình xử lý cho nó.

    Bước 3: Thực hiện gỡ lỗi từng bước

    Một lý do phổ biến khiến xảy ra lỗi là tập lệnh không được thực thi theo thứ tự bạn nghĩ. Bạn có thể tránh vấn đề này bằng cách quan sát việc thực thi từng dòng mã. Hãy thử:

    • Trong bảng "Nguồn", nhấp vào "Bước vào nút gọi chức năng tiếp theo"

    Nút này sẽ cho phép bạn theo dõi tuần tự việc thực hiện chức năng onClick. Dừng quá trình khi DevTools nổi bật hàng tiếp theo mã số:

    if (inputsAreEmpty()) (

    if (inputsAreEmpty()) (

    • Bây giờ hãy nhấp vào nút “Bước qua nút gọi chức năng tiếp theo”;

    DevTools hiện đã biết thực thi inputAreEmpty() mà không cần gỡ lỗi nội dung của nó. Xin lưu ý rằng DevTools bỏ qua một số dòng mã. Điều này là do inputAreEmpty() trả về sai, do đó khối if không được thực thi.

    Đây là bản chất của việc gỡ lỗi mã từng bước. Nếu nhìn vào mã trong get-started.js, bạn sẽ thấy rằng lỗi có thể nằm ở đâu đó trong hàm updateLabel(). Thay vì xem qua từng dòng mã, bạn có thể sử dụng một loại điểm ngắt khác để dừng quá trình ở gần nơi xảy ra lỗi hơn.

    Bước 4: Chọn điểm dừng khác

    Loại dòng mã là điểm dừng phổ biến nhất. Nếu bạn biết lỗi có thể ở đâu, hãy sử dụng loại này:

    • Nhìn vào dòng cuối cùng mã trong updateLabel() trông như thế này:

      label.textContent = addend1 + " + " + addend2 + " = " + sum;

      nhãn. textContent = addend1 + " + " + addend2 + " = " + sum ;

    • Ở bên trái của mã này, bạn sẽ thấy số dòng: 32. Nhấp vào 32. Bây giờ DevTools sẽ luôn tạm dừng cho đến khi dòng mã này được thực thi;
    • Nhấp vào nút "Tiếp tục thực thi tập lệnh". Tập lệnh sẽ tiếp tục thực thi cho đến dòng mã tiếp theo có điểm dừng;
    • Hãy xem các dòng mã trong updateLabel() đã được thực thi. DevTools xuất ra các giá trị của addend1, addend2 và sum.
    • Số tiền có vẻ đáng ngờ. Có vẻ như nó không được đánh giá dưới dạng số mà dưới dạng chuỗi. Đây là một cái khác Lý do phổ biến lỗi.

      Bước 5: Kiểm tra giá trị biến

      Nguyên nhân phổ biến gây ra lỗi là do một biến hoặc hàm tạo ra giá trị sai. Nhiều nhà phát triển sử dụng console.log() để xem các giá trị thay đổi như thế nào, nhưng console.log() kém phù hợp vì ít nhất hai lý do: thứ nhất, nó có thể yêu cầu chỉnh sửa mã thủ công bằng một lượng lớn gọi console.log(), thứ hai, bạn có thể không biết biến nào có liên quan đến lỗi, do đó bạn sẽ phải in nhiều biến cùng một lúc.

      Một giải pháp thay thế cho console.log trong DevTools là Watch Expressions. Sử dụng Biểu thức theo dõi để theo dõi những thay đổi trong giá trị biến. Như tên cho thấy, Biểu thức xem không chỉ giới hạn ở các biến. Bạn có thể lưu bất kỳ giá trị hợp lệ Biểu thức JavaScript trong Biểu thức xem:

      • Trong bảng "Nguồn", chọn tab "Xem";
      • Sau đó nhấp vào "Thêm biểu thức";
      • Nhập loại tổng;
      • Bấm phím Enter. DevTools sẽ hiển thị kiểu tổng: "chuỗi". Giá trị này là kết quả của Watch Expression.

      Như mong đợi, tổng được coi là một chuỗi chứ không phải số. Đây chính là lỗi mà chúng ta đã nói ở trên.

      Một lựa chọn khác của DevTools cho console.log() là console. Các nhà phát triển thường sử dụng nó để ghi đè các giá trị biến khi gỡ lỗi. Trong trường hợp của bạn, bảng điều khiển có thể hữu ích để kiểm tra các cách khắc phục lỗi. Ví dụ:


      Bước 6: Thực hiện chỉnh sửa

      Bạn đã xác định được lỗi ở đâu. Tất cả những gì còn lại là khắc phục bằng cách chỉnh sửa mã và khởi động lại bản demo. Bạn có thể chỉnh sửa Mã JavaScript trực tiếp đến giao diện người dùng Những công cụ của nhà phát triển:

      • Trong trình chỉnh sửa mã, trong bảng Nguồn, thay thế var sum = addend1 + addend2 bằng var sum = parseInt(addend1) + parsInt(addend2); Đây là dòng số 31.
      • Nhấn Cmd + S (Mac) hoặc Ctrl + S (Windows, Linux) để áp dụng các thay đổi. Nền của mã sẽ chuyển sang màu đỏ để cho biết tập lệnh đã được sửa đổi trong DevTools;
      • Nhấp vào "Vô hiệu hóa điểm dừng"

      Màu sắc sẽ chuyển sang màu xanh. Ở chế độ này, DevTools bỏ qua mọi điểm dừng bạn đã đặt.

      • Nhấp vào "Tiếp tục thực thi tập lệnh".

      Nhập số vào các trường và kiểm tra. Bây giờ mọi thứ sẽ hoạt động như bình thường!

      Khả năng gỡ lỗi mã là một kỹ năng quan trọng đối với nhà phát triển. Điều quan trọng là phải hiểu và sử dụng được nhiều công cụ sửa lỗi hiện có cho ngôn ngữ cụ thể lập trình.

      Thật không may, việc gỡ lỗi có vẻ không rõ ràng khi làm việc với JavaScript ngoài chức năng đầy đủ. IDE. Ít nhất — thoạt nhìn.

      Bài viết này sẽ xem xét cách bạn có thể gỡ lỗi mã JavaScript trong Google Chrome Dev Tools và trong trình chỉnh sửa Visual Studio Code.

      Ghi chú của người dịch: bằng cách nhấp vào liên kết này, bạn có thể xem phiên bản video của bài viết này Gỡ lỗi JavaScript trong Google Chrome và Visual Studio Code bằng tiếng Anh.

      cài đặt trước

      Trong bài viết này, quá trình gỡ lỗi sẽ được thảo luận bằng cách sử dụng ví dụ về ứng dụng thử nghiệm có tên “ Trò chuyện nhanh»:

      Bạn có hai cách để sử dụng ứng dụng này. Bạn có thể tự tạo nó bằng cách sử dụng cái này một loạt các bài học video. Hoặc bạn có thể sử dụng mã nguồn rồi ứng dụng làm sẵn"Trò chuyện nhanh":

      Cho dù bạn chọn tùy chọn nào, bạn sẽ cần chạy ứng dụng Trò chuyện nhanh cục bộ.

      Bạn có thể chạy ứng dụng từ Node.js ( Tôi phải làm nó như thế nào). Hoặc sử dụng plugin bên dưới Visual Studio Mã có tên là Live Server.

      Nếu bạn chưa quen với plugin này, bạn có thể tìm hiểu cách sử dụng nó bằng video này — Tiện ích mở rộng máy chủ trực tiếp trong Visual Studio Code.

      Ghi chú của người dịch: video bằng tiếng Anh.

      Về mặt kỹ thuật, tôi nhận được tên người dùng không chính xác bằng cách sử dụng usernameInput.text thay thế lựa chọn đúng tên người dùngInput.value . Nếu tôi phạm sai lầm như vậy trong đời thực, suy nghĩ đầu tiên của tôi là sử dụng công cụ console.log().

      Nhưng đây không hẳn là trường hợp có thể giúp tôi, như bạn có thể thấy trong hình bên dưới. Nếu việc sử dụng console.log() cũng là suy nghĩ đầu tiên của bạn thì bạn đã đến đúng nơi và đang làm điều đúng đắn khi đọc bài viết này!

      Cơ bản về gỡ lỗi

      Hãy bắt đầu với những điều cơ bản. Ý tưởng đằng sau việc gỡ lỗi là bên trong Mã chương trình bạn có thể đặt cái gọi là điểm dừng ( điểm dừng) để dừng thực hiện chương trình tại một vị trí cụ thể.

      Điều này mang lại cho bạn, với tư cách là nhà phát triển, cơ hội xem xét trạng thái hiện tại của ứng dụng và kiểm tra, chẳng hạn như giá trị của các biến trong đó. Bạn thậm chí có thể đi xa hơn và theo dõi bất kỳ biến nào bạn chọn để bất cứ khi nào ứng dụng dừng, bạn có thể kiểm tra giá trị của các biến đó.

      Sau khi thiết lập điểm dừng ( điểm dừng) trong mã, theo quy tắc, có một số tùy chọn cho các hành động tiếp theo:

      • tiếp tục thực hiện chương trình
      • đi từng bước qua tất cả các giai đoạn của chương trình - từng dòng một
      • thoát khỏi chức năng hiện tại nơi bạn ở
      • đi đến chức năng tiếp theo

      Bạn cũng sẽ có quyền truy cập để xem ngăn xếp cuộc gọi ( ngăn xếp cuộc gọi). Nói cách khác, vì các hàm trong một chương trình có thể gọi các hàm khác để thực thi nên bạn có thể xem lịch sử cuộc gọi những chức năng này.

      Gỡ lỗi trong Google Chrome

      Để bắt đầu gỡ lỗi ứng dụng của bạn trong trình duyệt Google Chrome, hãy thêm trình xử lý sự kiện nút clickBtn nhà điều hành trình gỡ lỗi như sau:

      Khi quá trình thực thi chương trình đạt đến dòng có câu lệnh gỡ lỗi, ứng dụng sẽ bị tạm dừng và các công cụ gỡ lỗi của trình duyệt Google Chrome sẽ tự động được kích hoạt.

      Xin lưu ý rằng ứng dụng trong cửa sổ trình duyệt được tô bóng xámđể cho thấy rằng nó đang bị tạm dừng. Cũng lưu ý rằng tab Nguồn trong Công cụ dành cho nhà phát triển Chrome được mở tự động:

      Hãy xem những gì chúng ta thấy trên tab Nguồn.

      Tab nguồn

      Điều đầu tiên bạn có thể nhận thấy trên tab này là bản sao mã nguồn của ứng dụng. Đây là mã mà trình duyệt đã tải và hoạt động.

      Bạn cũng có thể nhận thấy rằng dòng mã có câu lệnh gỡ lỗi được đánh dấu màu xanh lam để cho chúng tôi biết rằng ứng dụng đã ngừng thực thi tại thời điểm này trong mã:

      Trình duyệt Google Chrome cung cấp cho chúng tôi khả năng xem mã nguồn của ứng dụng. Có mã nguồn trước mặt, bạn có thể cài đặt trong đó điểm dừng.

      Điểm dừng nhằm mục đích chỉ ra nơi cần dừng thực hiện chương trình. Nhà điều hành trình gỡ lỗi mà chúng tôi đã sử dụng trong ví dụ trên có các chức năng như điểm dừng, nhưng trong mã nguồn ứng dụng thì nó như thế này điểm dừng không nhất thiết phải chỉ có một.

      Điểm dừng là sự cố ý dừng hoặc tạm dừng việc thực hiện chương trình.

      Thêm điểm dừng, bạn cần nhấp vào gutter — trường bên trái cách đánh số dòng mã. Sau khi hoàn tất hành động này, bạn sẽ nhận thấy rằng trình duyệt Google Chrome đã tự động thêm tùy chọn này điểm dừng vào danh sách “Điểm dừng”:

      Tab phạm vi

      Tab Phạm vi là nơi bạn có thể theo dõi các biến trong ứng dụng của mình. Xin lưu ý rằng tab này có ba phần: phạm vi cục bộ ( Địa phương), phạm vi toàn cầu ( Toàn cầu) và phần tập lệnh ( Kịch bản).

      Trong phần tập lệnh, bạn có thể theo dõi các biến trong phạm vi của tập lệnh hiện tại:

      Bạn sẽ dành phần lớn thời gian để gỡ lỗi ứng dụng trong tab này. Đây là một giải pháp thay thế hiệu quả hơn nhiều cho việc sử dụng nhiều console.log() s.

      Tab xem

      Như đã đề cập trước đó, ngoài việc xem các biến trong tab Phạm vi, bạn cũng có thể xác định các biến có giá trị mà bạn muốn theo dõi trong suốt quá trình thực thi chương trình.

      Bằng cách thêm một biến trong tab Xem, mỗi lần bạn đặt điểm ngắt, bạn có thể nhanh chóng kiểm tra giá trị của biến đó (giá trị này có thể không được xác định tùy thuộc vào vị trí của bạn trong mã).

      Nhấp vào dấu cộng và nhập tên của biến bạn muốn theo dõi, trong trường hợp của chúng tôi là usernameInput:

      Danh sách bước, ngăn xếp cuộc gọi và điểm dừng

      Phần tab "Nguồn", nằm ở góc dưới bên trái của cửa sổ trình gỡ lỗi, cho phép bạn xem danh sách các điểm dừng, ngăn xếp cuộc gọi ( ngăn xếp cuộc gọi) vân vân.

      TRONG ngăn xếp cuộc gọi Chỉ có một chức năng là xử lý sự kiện cho nút đăng nhập. Hàm này được liệt kê vì đây là hàm duy nhất được gọi khoảnh khắc này. Vì một số hàm có thể gọi các hàm khác để thực thi nên chuỗi này sẽ được cập nhật tương ứng.

      Cũng chú ý các nút mũi tên ở đầu màn hình. Những chức năng này tương ứng với các chức năng ở trên để tiếp tục chạy mã của bạn hoặc duyệt qua từng dòng một ( bước đi). Tôi khuyên bạn nên thử nghiệm các nút này một chút để làm quen với cách thực thi mã.

      Cuối cùng, có Nhiều loại khác nhauđiểm dừng có thể được thiết lập. Hãy xem một ví dụ về tạo điểm dừng có điều kiện ( điểm dừng có điều kiện), sẽ chỉ kích hoạt khi đáp ứng một điều kiện nhất định.

      Ví dụ: giả sử chúng tôi muốn ngăn sự kiện nút đăng nhập chỉ được xử lý khi người dùng cố gắng đăng nhập mà không nhập tên người dùng.

      Chúng ta có thể làm điều này bằng cách nhấp chuột phải vào trường máng xối và tạo điểm dừng với điều kiện sau — usernameInput.text === "" :

      Trường hợp gỡ lỗi Ứng dụng nhanh Trò chuyện, nếu bạn nhấp vào nút đăng nhập mà không có tên người dùng, nó sẽ được khởi chạy điểm dừng. Nếu không, mã sẽ tiếp tục thực thi như bình thường.

      Xin lưu ý rằng thậm chí còn có nhiều hơn nữa Tùy chọn có sẵn điểm dừng, mà không được thảo luận trong bài viết này.

      Gỡ lỗi trong Visual Studio Code

      Công cụ dành cho nhà phát triển Chrome là một trong những công cụ tốt nhất thuộc loại này. Như bạn đã thấy, nó cung cấp các tính năng và chức năng tuyệt vời để gỡ lỗi ứng dụng.

      Tuy nhiên, nhóm phát triển Visual Studio Code đã thực hiện công việc lớnđể quá trình gỡ lỗi trong trình soạn thảo này trở nên hoàn hảo hơn.

      Tôi thực sự thích Visual Studio Code và dành nhiều thời gian cho nó hơn bất kỳ trình soạn thảo mã nào khác. Quá trình này cũng bao gồm việc gỡ lỗi.

      Để bắt đầu gỡ lỗi mã trong VS Code, bạn sẽ cần cài đặt plugin Trình gỡ lỗi cho Chrome:

      Chúng ta hãy xem tab Gỡ lỗi. Theo mặc định, nó nằm ở thanh bên của trình soạn thảo. Mở tab này bằng cách nhấp vào biểu tượng trông giống như một lỗi ( sâu bọ).

      Khi mở bảng này, bạn sẽ thấy các công cụ rất giống với những công cụ chúng ta đã thấy trong trình duyệt Google Trình duyệt Chrome - biến, ngăn xếp cuộc gọi, điểm dừng:

      Số đông chức năng, mà chúng tôi đã xử lý trong Công cụ dành cho nhà phát triển Chrome, cũng có sẵn trong Mã VS.

      Bây giờ chúng ta đã quen với tab Gỡ lỗi, chúng ta cần tạo một cấu hình để cho trình soạn thảo VS Code biết cách gỡ lỗi ứng dụng của chúng ta.

      VS Code lưu trữ cấu hình gỡ lỗi trong tệp launch.json bên trong thư mục .vscode. Để yêu cầu VS Code tạo tệp này cho chúng tôi, trong menu soạn thảo, hãy mở danh sách thả xuống “Không có cấu hình” và chọn “Thêm cấu hình”.

      VS Code lưu trữ cấu hình gỡ lỗi trong một tệp có tên launch.json bên trong thư mục .vscode

      Sau đó từ danh sách này chọn "Chrome".

      Từ tác giả: console.log có thể cho bạn biết nhiều điều về ứng dụng của bạn, nhưng nó không cho phép bạn thực sự gỡ lỗi mã của mình. Trình gỡ lỗi JS mới trong Firefox sẽ giúp bạn viết mã nhanh hơn và không gặp lỗi. Một bài viết về nguyên lý hoạt động của trình gỡ lỗi này.

      Trong ví dụ này, chúng ta sẽ mở một ứng dụng rất đơn giản giúp việc gỡ lỗi JavaScript trở nên dễ dàng. Bản thân ứng dụng này chạy trên cơ bản mã nguồn mở Các khung công tác JS. Mở nó vào phiên bản mới nhất Firefox Developer Edition và chạy debugger.html bằng cách sử dụng tổ hợp Phím tùy chọn+ Cmd + S trên Mac hoặc Shift + Ctrl + S trên Windows. Trình gỡ lỗi được chia thành 3 bảng: bảng danh sách tệp, bảng mã và thanh công cụ.

      Thanh công cụ được chia thành thanh công cụ, xem biểu thức, điểm dừng, ngăn xếp cuộc gọi và các khu vực.

      Ngừng sử dụng console.log

      Chúng tôi muốn sử dụng console.log để gỡ lỗi mã của mình. Chúng ta chỉ cần thêm lệnh gọi vào mã để tìm ra giá trị của biến, thế là xong, phải không? Cách tiếp cận này sẽ hiệu quả, nhưng nó cồng kềnh và tốn thời gian. Trong ví dụ này, chúng ta sẽ duyệt qua ứng dụng bằng debugger.html để tìm giá trị của một biến.

      Với debugger.html, bạn có thể tìm hiểu sâu hơn về mã của mình bằng cách thêm điểm ngắt trên một dòng. Điểm dừng tạm dừng trình gỡ lỗi để bạn có thể xem mã. Trong ví dụ này, chúng tôi sẽ thêm điểm dừng trên dòng 13 của tệp app.js.

      Bây giờ hãy thêm nhiệm vụ vào danh sách. Mã sẽ dừng ở hàm addTodo và chúng ta có thể xem giá trị của trường trong mã. Di chuột qua một biến để xem giá trị của nó, v.v. Bằng cách này bạn có thể thấy các neo, applet, phần tử con vân vân.:

      Thông tin tương tự có thể được tìm thấy trong bảng Khu vực.

      Khi tập lệnh bị tạm dừng, bạn có thể thực hiện từng dòng của nó bằng thanh công cụ. Các nút Tiếp tục/Tạm dừng thực hiện chính xác những gì chúng nói. Nút Bước qua thực hiện dòng hiện tại code, Enter – đi vào bên trong hàm, Exit – thực thi hàm hiện tại trước khi thoát khỏi lệnh gọi của nó.

      Theo dõi giá trị của biến đơn sắc bằng cách sử dụng biểu thức đồng hồ. Chỉ cần nhập một biểu thức vào hộp Biểu thức cần theo dõi và trình gỡ lỗi sẽ theo dõi biểu thức đó khi mã của bạn chạy. Trong ví dụ trên, bạn có thể thêm các biểu thức tiêu đề và việc cần làm và trình gỡ lỗi sẽ chia nhỏ các giá trị khi chúng có sẵn. Đặc biệt hữu ích khi:

      Bạn duyệt qua mã và xem giá trị thay đổi;

      Bạn gỡ lỗi cùng một mã nhiều lần và muốn xem các giá trị chung;

      Bạn đang cố gắng tìm hiểu tại sao cái nút chết tiệt đó không hoạt động.

      Bạn cũng có thể gỡ lỗi các ứng dụng React/Redux bằng debugger.html. Làm thế nào nó hoạt động:

      Điều hướng đến thành phần bạn muốn gỡ lỗi.

      Xem sơ đồ thành phần bên trái (các chức năng trong một lớp).

      Thêm điểm dừng vào các chức năng thích hợp.

      Nhấn tạm dừng và quan sát các thuộc tính và trạng thái của thành phần.

      Ngăn xếp cuộc gọi được đơn giản hóa, do đó bạn sẽ thấy mã ứng dụng được trộn lẫn với khung.

      debugger.html cho phép bạn xem mã khó hiểu hoặc mã rút gọn có thể gây ra lỗi. Đặc biệt hữu ích khi làm việc với các framework phổ biến như React/Redux. Trình gỡ lỗi biết về thành phần bạn đã tạm dừng và sẽ hiển thị ngăn xếp lệnh gọi, sơ đồ thành phần và thuộc tính được đơn giản hóa. Dưới đây, nhà phát triển Amit Zur giải thích cách anh sử dụng trình gỡ lỗi mã Firefox trên JS Kongress:

      Nếu bạn muốn xem xét kỹ hơn về debugger.html mới, hãy xem Sân chơi dành cho nhà phát triển Mozilla. Chúng tôi đã tạo một loạt hướng dẫn để giúp các nhà phát triển tìm hiểu cách sử dụng hiệu quả công cụ này để gỡ lỗi mã.

      Công cụ dành cho nhà phát triển nguồn mở

      Dự án debugger.html đã được khởi động khoảng 2 năm trước cùng với đợt sửa chữa hoàn chỉnh của Firefox DevTools. Chúng tôi muốn chuyển DevTools sang công nghệ hiện đại, mở chúng cho các nhà phát triển trên khắp thế giới. Và bởi vì công nghệ này là mở nên nó có thể tự do phát triển thành thứ gì đó mà một nhóm nhỏ ở Mozilla không bao giờ có thể tưởng tượng được.

      JS là nền tảng của bất kỳ ứng dụng web nâng cao nào, vì vậy trình gỡ lỗi mạnh mẽ là một phần cốt lõi của bộ công cụ. Chúng tôi muốn tạo ra thứ gì đó nhanh chóng, dễ sử dụng, có thể thích ứng - có thể gỡ lỗi bất kỳ khung JS mới nào. Chúng tôi quyết định sử dụng các công nghệ web phổ biến vì chúng tôi muốn làm việc gần gũi hơn với cộng đồng. Cách tiếp cận này sẽ cải thiện chính trình gỡ lỗi - nếu chúng tôi áp dụng Webpack và bắt đầu sử dụng công cụ xây dựng và bản đồ nguồn trong nội bộ, chúng tôi muốn cải thiện việc ánh xạ giữa các nguồn và khởi động nóng.

      debugger.html được viết bằng React, Redux và Babel. Các thành phần React nhẹ, có thể kiểm thử và dễ thiết kế. Để tạo mẫu và tài liệu UI nhanh chóng thành phần chung chúng tôi sử dụng React Storybook. Điều này giúp làm việc với các khung JS khác nhau dễ dàng hơn (chẳng hạn như React). Giao diện người dùng Babel cho phép bạn thực hiện những việc như hiển thị lớp Thành phần và các chức năng của nó ở thanh bên trái. Chúng tôi cũng có thể đặt điểm dừng trên các hàm và chúng sẽ không di chuyển nếu bạn thay đổi mã.

      Hành động Redux là một API UI thuần túy. Tuy nhiên, chúng cũng có thể được sử dụng để tạo CLI Trình gỡ lỗi JS độc lập. Kho lưu trữ Redux có các bộ chọn để truy vấn trạng thái gỡ lỗi hiện tại. Các bài kiểm tra đơn vị của chúng tôi chạy các hành động Redux và mô phỏng phản hồi của trình duyệt. Kiểm tra tích hợp đưa trình duyệt vào hoạt động với các hành động gỡ lỗi Redux. Bản thân kiến ​​trúc chức năng được thiết kế để thử nghiệm.

      Chúng tôi đã dựa vào cộng đồng Nhà phát triển Mozillaở mọi bước. Dự án đã được xuất bản trên GitHub và nhóm của chúng tôi đã liên hệ với các nhà phát triển trên khắp thế giới và họ đã phản hồi. Ngay từ đầu, các bài kiểm tra tự động rất quan trọng đối với cộng đồng. Các thử nghiệm đã thực hiện hồi quy và ghi lại hành vi có thể dễ dàng bị bỏ qua. Đó là lý do tại sao một trong những bước đầu tiên là viết bài kiểm tra đơn vị cho Hành động chuyển đổi và các loại Luồng dành cho lưu trữ Redux. Trên thực tế, cộng đồng đảm bảo rằng phạm vi phủ sóng của Flow và Jest đã giúp đảm bảo rằng mọi tệp đều được viết và kiểm tra.

      Với tư cách là nhà phát triển, chúng tôi tin rằng các công cụ sẽ mạnh mẽ hơn khi có nhiều nhà phát triển tham gia hơn. Của chúng tôi nhóm chủ lực Lúc nào cũng ít (2 người), nhưng trung bình mỗi tuần có 15 trợ lý. Cộng đồng đã cho chúng tôi những góc nhìn khác nhau, giúp chúng tôi lường trước những thách thức và viết ra những tính năng mà chúng tôi chưa từng tưởng tượng. Chúng tôi hiện đang định dạng ngăn xếp cuộc gọi cho 24 thư viện. Chúng tôi thậm chí không biết về nhiều người trong số họ. Chúng tôi cũng hiển thị bản đồ Webpack và Angular trong cây nguồn.

      Chúng tôi dự định chuyển tất cả các Công cụ dành cho nhà phát triển của Firefox sang GitHub để nhiều người hơn có thể sử dụng và cải thiện chúng. Chúng tôi sẽ sẵn lòng chấp nhận sự giúp đỡ của bạn. Bạn có thể truy cập trang dự án của chúng tôi debugger.html trên GitHub. Chúng tôi đã viết toàn bộ danh sách hướng dẫn để chạy trình gỡ lỗi trên máy của bạn, nơi bạn có thể thay đổi bất cứ điều gì bạn muốn. Sử dụng nó để gỡ lỗi mã JS cho mọi thứ - trình duyệt, thiết bị đầu cuối, máy chủ, điện thoại, robot. Nếu bạn thấy điều gì đó có thể được cải thiện, hãy viết thư cho chúng tôi trên GitHub.

      Hãy quên việc gỡ lỗi bằng console.log mãi mãi! Tìm hiểu cách sử dụng điểm ngắt để gỡ lỗi mã trong Công cụ dành cho nhà phát triển Chrome

      Bản dịch của bài viếtBrandon Morelli : Tìm hiểu cách gỡ lỗi JavaScript bằng Chrome DevTools . Được xuất bản với sự cho phép của tác giả.

      Việc tìm và sửa lỗi có thể khó khăn. Bạn có thể muốn sử dụng console.log() một cách không kiểm soát để mã của bạn hoạt động chính xác. Mọi chuyện đã kết thúc rồi!

      Bài viết này nói về cách gỡ lỗi chính xác! Bạn sẽ tìm hiểu cách sử dụng Công cụ dành cho nhà phát triển Chrome để đặt điểm dừng và kiểm tra mã. Cách tiếp cận này thường là tốt nhất phương pháp hiệu quả Tìm và sửa lỗi trong mã.

      Hướng dẫn này chỉ ra cách gỡ lỗi một vấn đề cụ thể, nhưng quy trình làm việc tương tự rất hữu ích để gỡ lỗi tất cả các loại lỗi JavaScript.

      Bước 1: Tái tạo lỗi

      Tái tạo lỗi—bước đầu tiên để gỡ lỗi—có nghĩa là khám phá chuỗi hành động dẫn đến sự xuất hiện của lỗi đó. Bạn có thể phải tái tạo lỗi nhiều lần, vì vậy nên loại bỏ mọi bước không cần thiết.

      Để tái tạo lỗi chúng tôi sẽ sửa trong quá trình hướng dẫn này, Làm theo hướng dẫn dưới đây:

      • Đây là trang web mà chúng tôi sẽ làm việc cho bài viết này. Mở nó trong một tab mới: DEMO.
      • Trong bản demo cho Số 1 nhập 5.
      • Nhập 1 cho Số 2.
      • Nhấp chuột Cộng Số 1 và Số 2.
      • Nhìn vào nhãn bên dưới đầu vào và nút. Cô ấy nói rằng 5 + 1 = 51.

      Ối. Đây là một kết quả không chính xác. Kết quả phải là 6. Đây là lỗi chúng tôi sẽ sửa.

      Bước 2: Tạm dừng thực thi mã bằng điểm dừng

      DevTools cho phép bạn tạm dừng quá trình thực thi mã của mình và truy xuất các giá trị mọi người biến tại thời điểm này. Công cụ tạm dừng mã được gọi là điểm dừng. Thử ngay bây giờ:

      • Quay lại bản demo và mở DevTools bằng cách nhấn Command+Option+I (Mac) hoặc Control+Shift+I (Windows, Linux).
      • Chuyển đến tab Nguồn.
      • Nhấp chuột Điểm dừng của trình xử lý sự kiệnđể mở rộng menu. DevTools tiết lộ danh sách các danh mục sự kiện như Hoạt hìnhBảng nhớ tạm.
      • Mở rộng danh mục sự kiện Chuột.
      • Lựa chọn nhấp chuột.
      • Quay lại demo, nhấp lại Cộng Số 1 và Số 2. DevTools sẽ tạm dừng và đánh dấu dòng mã trong bảng Nguồn:
      hàm onClick() (

      Khi bạn nhấn nhấp chuột, bạn đặt điểm dừng dựa trên tất cả các sự kiện nhấp chuột. Khi nhấp chuột xảy ra bất kì nút và nút này có trình xử lý sự kiện nhấp chuột, DevTools sẽ tự động dừng thực thi trên dòng mã xử lý nhấp chuột đầu tiên cho nút này.

      Bước 3: Khám phá mã

      Một nguyên nhân phổ biến gây ra lỗi là tập lệnh được thực thi không đúng thứ tự. Bằng cách kiểm tra mã, bạn có thể thực thi từng dòng mã và tìm ra chính xác vị trí nó được thực thi theo thứ tự không mong muốn. Thử ngay bây giờ:

      • Trên bảng điều khiển Nguồn trong DevTools nhấp vào Bước vào lệnh gọi hàm tiếp theo.
      Bước vào nút gọi chức năng tiếp theo

      Nút này cho phép bạn thực thi hàm onClick() từng dòng một. DevTools sẽ dừng thực thi và đánh dấu dòng mã sau:

      Nếu (inputsAreEmpty()) (

      • Bây giờ bấm vào nút Bước qua lệnh gọi hàm tiếp theo.
      Bước qua nút gọi chức năng tiếp theo

      Điều này yêu cầu DevTools thực thi hàm inputAreEmpty() mà không cần truy cập vào nó. Xin lưu ý rằng DevTools bỏ qua một số dòng mã. Điều này xảy ra vì inputAreEmpty() đánh giá thành false, do đó khối mã câu lệnh if không được thực thi.

      Đây là ý tưởng cơ bản đằng sau việc khám phá mã. Nếu nhìn vào mã get-started.js, bạn sẽ thấy lỗi có thể nằm ở đâu đó trong hàm updateLabel(). Thay vì kiểm tra từng dòng mã, bạn có thể sử dụng một loại điểm dừng khác để tạm dừng mã gần nơi xảy ra lỗi hơn.

      Bước 4: Đặt điểm dừng khác

      Điểm dừng phổ biến nhất được đặt trên các dòng mã là khi bạn có một dòng mã cụ thể mà bạn muốn tạm dừng. Thử ngay bây giờ:

      • Nhìn vào dòng mã cuối cùng trong updateLabel() :
      label.textContent = addend1 + "+" + addend2 + "=" + sum;

      Ở bên trái của mã, bạn có thể thấy số dòng cụ thể đó: 32 . Nhấn vào nó. DevTools sẽ đặt biểu tượng màu xanh lam trên số đó. Điều này có nghĩa là có một điểm dừng trên dòng đó. DevTools bây giờ sẽ luôn tạm dừng trước nó.

      • Nhấn vào nút Tiếp tục thực thi tập lệnh:
      Nút tiếp tục thực thi tập lệnh

      Tập lệnh sẽ chạy cho đến khi đạt đến điểm dừng.

      • Hãy xem các dòng mã đã được thực thi trong updateLabel() . DevTools xuất ra các giá trị của addend1, addend2 và sum.

      Giá trị tổng có vẻ đáng ngờ. Có vẻ như nó đang được coi là một chuỗi trong khi lẽ ra nó phải là một số. Đây có thể là nguyên nhân gây ra lỗi của chúng tôi.

      Bước 5: Kiểm tra các giá trị biến

      Một nguyên nhân phổ biến khác gây ra lỗi là khi một biến hoặc hàm tạo ra các giá trị khác với mong đợi. Để xem các giá trị thay đổi như thế nào theo thời gian, nhiều nhà phát triển sử dụng console.log(), nhưng console.log() có thể tẻ nhạt và không hiệu quả vì hai lý do. Trước tiên, bạn có thể cần chỉnh sửa mã theo cách thủ công với nhiều lệnh gọi console.log(). Thứ hai, bạn có thể không biết chính xác biến nào có liên quan đến lỗi, vì vậy bạn có thể cần ghi lại nhiều biến.

      Watch Expressions là một giải pháp thay thế DevTools cho console.log() . Sử dụng Biểu thức theo dõi để theo dõi giá trị của các biến theo thời gian. Như tên cho thấy, Biểu thức xem không chỉ giới hạn ở các biến. Bạn có thể lưu trữ bất kỳ biểu thức JavaScript hợp lệ nào trong Watch Expression. Thử ngay bây giờ:

      • Trên bảng điều khiển Nguồn Nhấp chuột vào Công cụ dành cho nhà phát triển Đồng hồ. Phần này sẽ mở ra.
      • Nhấp chuột Thêm biểu thức.
      Nút Thêm biểu thức
      • Nhập loại tổng .
      • Bấm phím Enter. DevTools sẽ hiển thị: typeof sum: "string" . Giá trị bên phải dấu hai chấm là kết quả của Watch Expression của bạn.

      Đúng như mong đợi, tổng được coi là một chuỗi khi nó phải là một số. Đây là lý do dẫn đến lỗi của chúng tôi trong bản demo.

      Firebug chứa trình gỡ lỗi AvaScript mạnh mẽ cung cấp cho bạn khả năng tạm dừng thực thi bất kỳ lúc nào và xem mọi biến tại thời điểm đó. Nếu mã của bạn chậm, hãy sử dụng trình lược tả JavaScript để đo hiệu suất và nhanh chóng tìm ra các điểm nghẽn.

      Tìm tập lệnh một cách dễ dàng

      Nhiều ứng dụng web bao gồm số lượng lớn các tệp và việc tìm tệp để gỡ lỗi có thể là một công việc thường ngày và nhàm chán. Menu chọn tập lệnh của Firebug sắp xếp và sắp xếp các tệp thành một danh sách rõ ràng, dễ hiểu giúp bạn tìm thấy bất kỳ tệp nào chỉ bằng một cú nhấp chuột.

      Tạm dừng thực hiện ở bất kỳ dòng nào

      Firebug cho phép bạn đặt các điểm ngắt, thông báo cho trình gỡ lỗi ngừng thực thi tập lệnh khi nó đạt đến chuỗi cụ thể. Trong khi quá trình thực thi bị tạm dừng, bạn có thể xem giá trị của bất kỳ biến nào và kiểm tra đối tượng.

      Để đặt điểm dừng, hãy nhấp vào bất kỳ số dòng nào và dấu chấm màu đỏ sẽ xuất hiện ở đó, cho biết điểm dừng đã được đặt. Nhấp vào dấu chấm màu đỏ một lần nữa để xóa điểm ngắt.

      Chỉ tạm dừng thực hiện nếu...

      Điểm dừng có thể gây ra vấn đề nếu được kích hoạt quá thường xuyên. Đôi khi chúng ta chỉ muốn tạm dừng thực thi khi đáp ứng được một số điều kiện nhất định. Firebug cho phép bạn đặt điểm dừng "có điều kiện". Họ kiểm tra một biểu thức phải đúng để điểm dừng hoạt động.

      Để đặt điểm dừng có điều kiện, chỉ cần nhấp chuột phải vào bất kỳ số dòng nào. Một bong bóng sẽ xuất hiện nhắc bạn nhập biểu thức javascript. Bạn có thể nhấp chuột phải lần nữa bất kỳ lúc nào để thay đổi biểu thức hoặc nhấp chuột trái để thoát khỏi điểm dừng.

      Một bước tại một thời điểm

      Khi trình gỡ lỗi đã tạm dừng thực thi, bạn có thể tiếp tục tập lệnh từng bước một. Điều này cho phép bạn thấy rõ việc thực thi một dòng cụ thể ảnh hưởng như thế nào đến các biến và đối tượng.

      Bạn cũng có thể tiếp tục thực hiện trên nhiều dòng. Chọn vào danh mục dòng mong muốn"Chạy đến dòng này" để tiếp tục thực hiện dòng này.

      Tôi bị gián đoạn khi mắc lỗi

      Không phải lúc nào bạn cũng chọn trình gỡ lỗi... Đôi khi trình gỡ lỗi chọn bạn. Firebug cung cấp cho bạn khả năng tự động chuyển sang trình gỡ lỗi khi xảy ra lỗi, do đó bạn có thể điều tra các điều kiện xảy ra sự cố.

      Chồng chưa mở

      Khi trình gỡ lỗi tạm dừng, Firebug hiển thị cho bạn ngăn xếp cuộc gọi, là tập hợp các lệnh gọi hàm lồng nhau hiện đang chạy và chờ quay lại.

      Ngăn xếp cuộc gọi được thể hiện bằng một dải nút nhỏ gọn trong bảng điều khiển, mỗi nút có tên của một chức năng trên ngăn xếp. Bạn có thể nhấp vào bất kỳ nút nào để chuyển đến dòng nơi hàm bị tạm dừng và xem giá trị của các biến cục bộ từ bên trong hàm.

      Xem biểu thức

      Khi gỡ lỗi, bạn thường muốn xem ý nghĩa của các biểu thức hoặc đối tượng phức tạp được chôn trong DOM. Firebug cho phép bạn in một biểu thức javascript tùy ý, giá trị của nó sẽ được cập nhật ở mỗi bước gỡ lỗi.

      Khi gõ biểu thức, hãy nhớ rằng bạn có thể sử dụng Phím Tabđể tự động hoàn thành các thuộc tính đối tượng.

      Gợi ý biến

      Trong khi quá trình thực thi bị tạm dừng, bạn có thể di chuyển chuột qua bất kỳ biến nào của hàm hiện tại, xem chú giải công cụ có giá trị. Đây là một cách tuyệt vời để bạn chú ý đến mã và nhận được câu trả lời trong khi đọc.

      Hiệu suất JavaScript hồ sơ

      Ứng dụng web của bạn gần như hoàn hảo. Bạn đã khắc phục được tất cả các lỗi, xong Thiết kế thời trang và người dùng yêu thích nó. Chỉ có một vấn đề - một số tính năng chậm và bạn không hiểu tại sao...

      Với Firebug, bạn không còn phải thắc mắc tại sao mã của mình chạy chậm nữa. Bằng cách sử dụng trình phân tích Firebug, bạn có thể tách ruồi ra khỏi thịt cốt lết chỉ trong vài giây.

      Để sử dụng trình lược tả, chỉ cần chuyển đến tab Bảng điều khiển và nhấp vào nút "Hồ sơ". Sau đó, sử dụng ứng dụng của bạn một lúc hoặc tải lại trang và nhấp lại vào "Hồ sơ". Bạn sẽ thấy báo cáo chi tiết cho biết chức năng nào đã được gọi và thời gian thực hiện của mỗi chức năng.

      Ghi nhật ký cuộc gọi chức năng

      Đôi khi hàm có vấn đề được gọi nhiều lần đến mức bạn không thể vào trình gỡ lỗi mỗi lần. Bạn chỉ muốn biết khi nào nó được gọi và với những thông số gì.

      Để theo dõi tất cả các lệnh gọi hàm, chỉ cần nhấp chuột phải vào tab Tập lệnh và chọn "Ghi nhật ký cuộc gọi đến" tên hàm "". Sau đó vào bảng điều khiển và xem các cuộc gọi xuất hiện trong nhật ký...

      Đi thẳng đến dòng 108

      Thường thì bạn muốn đi đến dòng mong muốn trong kịch bản một cách rõ ràng. Không có gì dễ dàng hơn, chỉ cần gõ số dòng vào cửa sổ tìm kiếm nhanh, đặt # đầu tiên, như minh họa trong ảnh chụp màn hình bên trái.