JavaScript: Có cách nào để Chrome khắc phục mọi lỗi không?


258

Tôi đang tìm kiếm một chức năng tương đương trong Chrome với chức năng "phá vỡ mọi lỗi" của Fireorms. Trong tab Tập lệnh, Chrome có "tạm dừng trên tất cả các ngoại lệ", nhưng điều này không hoàn toàn giống như phá vỡ tất cả các lỗi.

Chẳng hạn, khi tải một trang có mã sau đây, tôi muốn Chrome ngắt dòng foo.bar = 42. Thay vào đó, ngay cả khi bật "Tạm dừng trên tất cả các ngoại lệ", tôi không nhận được kết quả mong đợi.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

Bạn có thể thử mã được dán ở trên trên trang này hoặc sử dụng jsFiddle này .


Bạn đang nghĩ đến những loại lỗi nào khác?
Matthew Crumley

1
Bất kỳ lỗi nào, giả sử: một tham chiếu đến một biến không xác định (như trong console.log(gaga)) hoặc đến một thuộc tính không xác định (như trong window.foo.bar).
avernet

2
Những người nên ném ngoại lệ. Tùy chọn "tạm dừng ngoại lệ" hoạt động với tôi. Các lỗi duy nhất tôi có thể nghĩ rằng nó sẽ không hoạt động là lỗi cú pháp, nhưng các lỗi xảy ra trước khi mã được thực thi.
Matthew Crumley

1
Vâng, tôi đang thử điều này ngay bây giờ, và nó dường như phá vỡ lỗi ở đâu. Tôi đã làm điều này một vài ngày trước, và thay vì phá vỡ lỗi trong mã, nó đã phá vỡ một trường hợp ngoại lệ do lỗi được bắt gặp, đi lên ngăn xếp. Đi đi!
avernet

Câu trả lời:


210

Chỉnh sửa: Liên kết ban đầu tôi đã trả lời hiện không hợp lệ . URL mới hơn sẽ là https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoint#exceptions kể từ 2016-11-11.

Tôi nhận ra câu hỏi này có câu trả lời, nhưng nó không còn chính xác nữa. Sử dụng liên kết trên ^


(liên kết được thay thế bằng chỉnh sửa ở trên) - bây giờ bạn có thể đặt nó để phá vỡ tất cả các ngoại lệ hoặc chỉ những trường hợp chưa được xử lý. (Lưu ý rằng bạn cần ở trong tab Nguồn để xem nút.)

Chrome cũng đã thêm một số khả năng điểm dừng thực sự hữu ích khác, chẳng hạn như phá vỡ các thay đổi DOM hoặc các sự kiện mạng.

Thông thường tôi sẽ không trả lời lại một câu hỏi, nhưng bản thân tôi cũng có câu hỏi tương tự và tôi đã tìm thấy câu trả lời sai này, vì vậy tôi đoán rằng tôi đã đưa thông tin này vào đây cho những người đến sau để tìm kiếm. :)


1
Brian, cảm ơn bạn, nó thực sự đang làm việc. Tính năng này đã có sẵn vào tháng 2 năm ngoái, khi tôi đăng bài này, nhưng nó không hoạt động tốt, trong khi nó dường như đang hoạt động tốt. Cảm ơn vì bạn đã phản hồi.
avernet

Nút được liên kết bởi liên kết của bạn dường như không còn ở đó nữa (ít nhất là trong bản phát hành Chrome kênh hiện tại). Không chắc chắn làm thế nào để làm điều này một lần nữa.
Andrey Fedorov

2
Xin chào, tôi đang xem Chrome Canary và tôi vẫn thấy nút ở đó. Đó là nút thứ tư từ bên trái, như được hiển thị tại d.pr/i/DHwT - nhấp một lần và nó sẽ vào Tạm dừng trên tất cả các ngoại lệ, trong đó lần nhấp thứ hai sẽ đưa nó vào Tạm dừng trên các trường hợp ngoại lệ. Lần nhấp thứ ba trở về mặc định không tạm dừng.
Brian Arnold Sinclair

Liên kết bị hỏng Tôi sợ :(
Rick

1
Xin lỗi vì không thấy bình luận sớm hơn! Có vẻ như developers.google.com/web/tools/chrome-devtools/javascript/ chàng có ý chính của nội dung từ trước đó. Tôi cũng sẽ sửa đổi câu trả lời ban đầu, nếu tôi có thể.
Brian Arnold Sinclair

298

Tôi gặp rắc rối để có được nó vì vậy tôi đăng ảnh hiển thị các tùy chọn khác nhau:

Chrome 75.0.3770.142 [29 tháng 7 năm 2018]

Giao diện người dùng rất giống nhau vì ít nhất Chrome 38.0.2125.111 [11 tháng 12 năm 2014]

Trong tab Sources:

nhập mô tả hình ảnh ở đây

Khi nút được kích hoạt, bạn có thể Pause On Caught Exceptionsvới hộp kiểm bên dưới: nhập mô tả hình ảnh ở đây


Những phiên bản trước

Chrome 32.0.1700.102 [03 feb 2014]

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Chrome 27.0.1453.93 Ổn định

Tùy chọn gỡ lỗi


22
Tôi phải khen ngợi Facebook vì đã liên kết trực tiếp đến điều này trong tài liệu của họ. +1
jimm101

1
Ngoài ra, để mọi người lưu ý, các nút sẽ chỉ ẩn nếu thanh bên không được mở rộng, không có dấu hiệu cho thấy chúng ở đó.
Eric Majerus

17

Điều này hiện được hỗ trợ trong Chrome bằng nút "Tạm dừng trên tất cả các ngoại lệ".

Để kích hoạt nó:

  • Chuyển đến tab "Nguồn" trong Công cụ dành cho nhà phát triển Chrome
  • Nhấp vào nút "Tạm dừng" ở cuối cửa sổ để chuyển sang "Tạm dừng trên tất cả các chế độ ngoại lệ".

Lưu ý rằng nút này có nhiều trạng thái. Tiếp tục nhấp vào nút để chuyển giữa

  • "Tạm dừng trên tất cả các ngoại lệ" - nút có màu xanh nhạt
  • "Tạm dừng các ngoại lệ chưa được phát hiện", nút có màu tím .
  • "Đừng tạm dừng ngoại lệ" - nút có màu xám

1

Chỉ cần về bất kỳ lỗi sẽ ném một ngoại lệ. Các lỗi duy nhất tôi có thể nghĩ là sẽ không hoạt động với tùy chọn "tạm dừng ngoại lệ" là lỗi cú pháp, xảy ra trước khi bất kỳ mã nào được thực thi, do đó không có chỗ nào để tạm dừng và không có mã nào sẽ chạy.

Rõ ràng, Chrome sẽ không tạm dừng ngoại lệ nếu nó nằm trong khối thử bắt. Nó chỉ dừng lại ở những trường hợp ngoại lệ. Tôi không biết cách nào để thay đổi nó.

Nếu bạn chỉ cần biết ngoại lệ xảy ra trên dòng nào (thì bạn có thể đặt điểm dừng nếu ngoại lệ có thể lặp lại), Errorđối tượng được cung cấp cho khối bắt có thuộc stacktính cho biết ngoại lệ xảy ra ở đâu.


Matthew, tôi "sao chép" một cái gì đó tương tự như trường hợp tôi đã có (xem câu hỏi cập nhật). Bằng cách nào đó, tôi không khiến trình gỡ lỗi khắc phục lỗi đó. Bạn có biết lý do tại sao điều này sẽ không hoạt động với Chrome không (nó hoạt động với Fireorms khi bật "phá vỡ mọi lỗi").
avernet

@Mathhew, tôi đã tạo một câu trả lời khác nói rằng điều này là không thể, và đánh dấu nó là câu trả lời. Nếu bạn hoặc người khác tìm thấy giải pháp, tôi sẽ thay đổi điểm đánh dấu.
avernet

1

Thật không may, Công cụ dành cho nhà phát triển trong Chrome dường như không thể "dừng trên tất cả các lỗi", giống như Fireorms.


Chỉ cần nhấp vào nút Tạm dừng MỘT LẦN (nó sẽ có màu Xanh lam) và không đánh dấu tùy chọn Tạm dừng khi bị bắt ngoại lệ. Đó là tất cả, nó sẽ chỉ tạm dừng trên các lỗi.
Roy Shoa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.