Gỡ lỗi JavaScript của Chrome - làm cách nào để lưu các điểm ngắt giữa làm mới trang hoặc ngắt qua mã?


77

Khi sử dụng Chrome và đó là trình gỡ lỗi JavaScript, mỗi khi tôi tải lại trang / tập lệnh của mình, các điểm ngắt của tôi bị mất và tôi phải tìm tệp tập lệnh trong cửa sổ bật lên, tìm dòng mã cho điểm ngắt của mình, nhấp để thêm nó , Vân vân.

Có cách nào để lưu các điểm ngắt này để nó ngắt ngay cả sau khi làm mới trang (các trình gỡ lỗi khác mà tôi đã sử dụng làm điều này) không?

Ngoài ra, có cách nào rõ ràng trong mã JavaScript của tôi mà tôi có thể nhập nội dung nào đó để yêu cầu chrome bắt đầu theo dõi (tạm dừng trên một dòng) không?


2
Công cụ nhà phát triển Chrome nên giữ các điểm ngắt JS giữa các lần làm mới. Bạn có đang sử dụng <script>thẻ hoặc XMLHttpRequest+ evalđể bao gồm JS của mình không? Với XHR + eval, bạn mất các điểm ngắt.
JK

+1 Điều này xảy ra với tôi vài lần một ngày cũng như trên Chrome trên OSX. Hầu hết các điểm ngắt hoạt động tốt, nhưng đôi khi, điểm ngắt sẽ không dính khi tôi làm mới!
dano 21/09/12

Bạn sẽ breakpoint cũng lỏng lẻo nếu cái gì đó đang thay đổi trong chuỗi truy vấn của kịch bản (ví dụ, một xoá cache) Không chắc về #hash?
oriadam

Câu trả lời:


69

Bạn có thể đặt một

debugger;

để phá vỡ hầu hết các môi trường JavaScript. Chắc chắn họ sẽ tồn tại. Thật tốt nếu bạn có một trình thu nhỏ xử lý trình gỡ lỗi và lệnh gọi console.log cho môi trường sản xuất, nếu bạn đang sử dụng chúng.

Trong các phiên bản gần đây của trình duyệt Chrome, có một tùy chọn "Lưu giữ nhật ký" trên đầu bảng điều khiển, bên cạnh các bộ lọc. Trong các phiên bản cũ hơn, nhấp chuột phải vào cửa sổ giao diện điều khiển trống sẽ mang lại tùy chọn đó ("Bảo tồn nhật ký khi điều hướng"). Thật tiện lợi khi bạn không có câu lệnh console.log hoặc lệnh gọi trình gỡ lỗi được mã hóa cứng.

cập nhật: Tôi đã tìm thấy một công cụ trên github, được gọi là ống khói , lấy một tệp và xóa tất cả các lệnh gọi console.log. nó cung cấp một ý tưởng tốt về cách loại bỏ các cuộc gọi trình gỡ lỗi.


3
kiểm tra Preserve Log Khi Navigation dường như là vé thật để nhận được chrome để hành động như nó đã làm trước đây
chrismarx

đây là một giải pháp thay thế tốt cho nhân viên web: stackoverflow.com/a/4985794/300011
Ege Özcan

Tôi đã quên mất khoảng debugger;thời gian nửa tiếng đồng hồ để cố gắng tìm ra nó.
Eric Bishard

38

Đặt các điểm ngắt của bạn, chuyển sang tab Mạng và chọn nút chuyển đổi Bảo tồn Nhật ký Khi Điều hướng . Bây giờ các điểm ngắt sẽ ở đó khi bạn làm mới.

Hoặc cách JavaScript là sử dụng

debugger;

19

Ngoài ra, bạn có gửi (các) tệp JavaScript của mình từ máy chủ đến máy khách với tham số truy vấn đính kèm tới URL với thời gian Epoch hiện tại không? Điều này được sử dụng để ngăn chặn bộ nhớ đệm của (các) tệp JavaScript.

Khi trường hợp này xảy ra, có vẻ như Công cụ nhà phát triển Chrome sẽ diễn giải tệp là một tệp khác sau khi làm mới, điều này sẽ xóa (chính xác) các điểm ngắt.

Đối với tôi, việc xóa tham số truy vấn đã khiến CDT giữ lại các điểm ngắt sau khi làm mới.


3
Cảm ơn bạn! ExtJS 4 bao gồm tham số "_dc" để giữ cho các tệp không bị lưu vào bộ nhớ đệm và sẽ xóa các điểm ngắt mọi lúc. Thêm Ext.Loader.setConfig({ disableCaching: false, enabled: true });vào cấu hình ứng dụng sẽ vô hiệu hóa nó.
Brian Topping

@BrianTopping Thx cho gợi ý đó. Tại sao họ lại làm một điều ngu ngốc như gắn các tham số truy vấn động để ngăn chặn bộ nhớ đệm. Đó là trình duyệt (công cụ dành cho nhà phát triển) / máy chủ sẽ kiểm soát nó ...
Juri

@sjogren_me, bạn đã xóa tham số truy vấn trong Chrome Dev Tools như thế nào?
gwg

10

Điều này có thể xảy ra đối với các tập lệnh mà bạn đang tải hoặc đánh giá động từ các tập lệnh khác? Tôi có thể tự nói rằng kịch bản này thực sự làm tôi khó chịu cho đến khi tôi phát hiện ra thuộc tính sourceURL. Đặt nhận xét có định dạng đặc biệt sau vào dòng cuối cùng của tập lệnh mà bạn muốn gỡ lỗi sẽ 'neo' nó trong Chrome để nó có hệ quy chiếu cho nó:

// # sourceURL = filename.js

Các điểm ngắt được đặt theo cách thủ công của bạn bây giờ sẽ tồn tại giữa các lần tải trang! Quy ước thực sự bắt nguồn từ thông số kỹ thuật sơ đồ nguồn, nhưng Chrome ít nhất cũng tôn vinh nó như một kỹ thuật độc lập. Đây là một tài liệu tham khảo .


2

Đối với những người sử dụng ExtJs 6.x:
thay vì vô hiệu hóa Bộ đệm trong Ext.Loader, bạn có thể thêm "bộ nhớ đệm" hoặc tham số truy vấn "disableCacheBuster" vào URL của trang. Thao tác này sẽ xóa tham số "_dc" khỏi tệp và cho phép trình gỡ lỗi chrome duy trì điểm ngắt.

Xem bootstrap.js trong ứng dụng của bạn (tham số cấu hình disableCaching).


1
có vẻ là cách thức khác bằng cách thiết lập giá trị trong app.json cho loader.cache: đúng, sencha.com/forum/...
Saurabh

1

Bạn có thể sử dụng debugger;câu lệnh trong nguồn của mình để làm cho trình gỡ lỗi ngắt ở đó.


0

Công cụ dành cho nhà phát triển Chrome sẽ hoạt động theo cách bạn mong đợi nhưng bạn có thể đặt các debugger;câu lệnh trong mã (phát triển!) Của mình để tạm dừng việc thực thi.


0

Bạn có thể đặt trình gỡ lỗi; trước mã nơi bạn muốn bắt đầu gỡ lỗi. Khi trang bắt đầu tải, nó sẽ dừng lại ở trình gỡ lỗi; tuyên bố. Sau đó, bạn có thể dễ dàng áp dụng điểm gỡ lỗi theo yêu cầu của bạn.


1
Câu trả lời này trùng lặp với một số câu đã được đưa ra 7 năm trước đó.
moopet
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.