Làm cách nào để đặt điểm dừng JavaScript từ mã trong Chrome?


686

Tôi muốn buộc trình gỡ lỗi Chrome phá vỡ một dòng thông qua mã hoặc nếu không bằng cách sử dụng một số loại thẻ nhận xét, chẳng hạn như một cái gì đó như console.break().


46
Bạn đã thử debugger;hay chỉ sử dụng các điểm dừng thông thường trong thanh công cụ dành cho nhà phát triển?
diaho

bạn có nghĩa là đặt điểm dừng từ chính mã chứ không phải đặt chúng bằng trình theo dõi tập lệnh trong các công cụ dành cho nhà phát triển?
Faris M

2

9
Không trùng lặp. "Trong Chrome" so với "trong mã" là hai điều khác nhau và câu hỏi này có thể áp dụng cho nhiều tình huống không phải XHR. Có 1 trong số các câu trả lời trong câu hỏi khác trả lời câu hỏi này, nhưng những câu trả lời khác không được áp dụng. Tôi thực sự đã googled "đặt điểm dừng javascript từ mã chrome" và đây là kết quả đầu tiên, và câu hỏi khác thậm chí không có trên trang đầu tiên.
AaronLS

Câu trả lời:


1158

Bạn có thể sử dụng debugger;trong mã của bạn. Nếu bảng điều khiển dành cho nhà phát triển mở, thực thi sẽ bị hỏng. Nó hoạt động trong firebird là tốt.


8
Một mẹo hay là kích hoạt trình gỡ lỗi sau vài giây:setTimeout(function(){debugger;}, 3000);
Shahar

30
Là thủ thuật hẹn giờ thông thường? Xác minh / biện minh?
Justus Eapen

4
Điều này rất hữu ích. Lưu ý cũng debugger;được hỗ trợ trong tất cả các trình duyệt chính. Để biết thêm thông tin: w3schools.com/jsref/jsref_debugger.asp
ScottyG

16
@ScottyG MDN kém sáng bóng hơn, hữu ích hơn: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
trộm

@JustusEapen Vấn đề là Javascript là một luồng đơn, vì vậy nó không thể làm gián đoạn mã đang chạy.
Vitruvius

27

Thiết lập một nút bấm nghe và gọi debugger;

Thí dụ

$("#myBtn").click(function() {
 debugger;   
});

Bản giới thiệu

http://jsfiddle.net/hBCH5/

Tài nguyên về gỡ lỗi trong JavaScript


1
Điều đó đặt điểm dừng trong trình xử lý nhấp chuột, có thể không phải là điều OP muốn
ᆼ ᆺ

@PeterV Tôi thấy nó hữu ích nếu tôi chỉ cố gắng mở mã của mình đến một nơi gần với một khối mã mà tôi đang gỡ lỗi ... nhưng không muốn gỡ lỗi mọi lúc ... nhưng vâng , nếu chỉ để mở trình gỡ lỗi ... thì sẽ có một phím bấm cho điều đó.
Armstrongest

27

Bạn cũng có thể sử dụng debug(function), để phá vỡ khifunction được gọi.

Tham chiếu API dòng lệnh: gỡ lỗi


2
Rất hay - dường như chỉ có Chrome vào thời điểm này, nhưng dù sao đó cũng là nền tảng chính của tôi. Bây giờ tôi chỉ cần nhớ ngừng gọi cờ gỡ lỗi toàn cầu của mình là "gỡ lỗi" ...
brichins

Tham chiếu API dòng lệnh của trình gỡ lỗi Chrome thực sự chứa một số điều khá hữu ích khác mà tôi không biết. Cảm ơn!
Peter T.


8

Trên tab "Tập lệnh", đi đến nơi mã của bạn. Ở bên trái của số dòng, bấm vào. Điều này sẽ đặt một điểm dừng.

Ảnh chụp màn hình:

ảnh chụp màn hình điểm dừng trong chrome

Sau đó, bạn sẽ có thể theo dõi các điểm dừng của mình trong tab bên phải (như được hiển thị trong ảnh chụp màn hình).


41
Điều này không trả lời câu hỏi, anh ta muốn có thể làm điều đó bằng mã
robertc

39
xn.: "Đây là hình ảnh câu trả lời của tôi, trở lại khi nó chỉ là một đứa trẻ nhỏ với 0 phiếu. Bây giờ tất cả đã trưởng thành."
AaronLS

3
Nếu bạn tải tập lệnh JS bằng lệnh gọi Ajax, nó sẽ không hiển thị ở đây, do đó cần có một điểm dừng trong mã.
Petruza

@FlorianMargaine, Không còn tab ScScript nữa. Hãy cập nhật hình ảnh.
Pacerier

Trong một số khung công tác, như Drupal, JS được thêm hậu tố chuỗi truy vấn bộ đệm. Nếu bạn xóa bộ đệm, nó thường cập nhật hậu tố này có thể xóa sạch mọi điểm dừng bạn đã đặt trên tải trước đó.
Nick

7

debugger là một từ khóa dành riêng của EcmaScript và được cung cấp ngữ nghĩa tùy chọn kể từ ES5

Kết quả là, nó không chỉ được sử dụng trong Chrome mà cả Firefox và Node.js thông quanode debug myscript.js .

Các tiêu chuẩn nói :

Cú pháp

DebuggerStatement :
    debugger ;

Ngữ nghĩa

Đánh giá việc sản xuất DebuggerStatement có thể cho phép việc triển khai gây ra điểm dừng khi chạy dưới trình gỡ lỗi. Nếu trình gỡ lỗi không có mặt hoặc hoạt động thì câu lệnh này không có hiệu lực quan sát được.

Trình gỡ lỗi sản xuấtStatement: trình gỡ lỗi; được đánh giá như sau:

  1. Nếu một cơ sở gỡ lỗi được xác định thực hiện có sẵn và được kích hoạt, thì
    1. Thực hiện một hành động gỡ lỗi được xác định.
    2. Đặt kết quả là một giá trị hoàn thành được xác định.
  2. Khác
    1. Đặt kết quả là (bình thường, trống rỗng, trống rỗng).
  3. Kết quả trả về.

Không có thay đổi trong ES6.


3

Có thể và có nhiều lý do bạn có thể muốn làm điều này. Ví dụ: gỡ lỗi một vòng lặp vô hạn javascript gần khi bắt đầu tải trang, điều đó ngăn không cho bộ công cụ dành cho nhà phát triển chrome (hoặc fireorms) tải chính xác.

Xem phần 2 của

http://www.laurencegellert.com/2012/05/the-three-ways-of-setting-breakpoint-in-javascript/

hoặc chỉ cần thêm một dòng chứa trình gỡ lỗi từ vào mã của bạn tại điểm kiểm tra bắt buộc.


3

Điểm dừng: -

điểm dừng sẽ dừng thực thi và cho phép bạn kiểm tra các giá trị JavaScript.

Sau khi kiểm tra các giá trị, bạn có thể tiếp tục thực thi mã (thường bằng nút phát).

Trình gỡ lỗi: -

Trình gỡ lỗi; dừng việc thực thi JavaScript và gọi chức năng gỡ lỗi.

Câu lệnh gỡ lỗi tạm dừng thực thi, nhưng nó không đóng bất kỳ tệp nào hoặc xóa bất kỳ biến nào.

Example:-
function checkBuggyStuff() {
  debugger; // do buggy stuff to examine.
};


2

Có nhiều cách để gỡ lỗi mã JavaScript. Theo hai cách tiếp cận được sử dụng rộng rãi để gỡ lỗi JavaScript thông qua mã

  1. Sử dụng console.log()để in ra các giá trị trong bảng điều khiển trình duyệt. (Điều này sẽ giúp bạn hiểu các giá trị tại một số điểm nhất định trong mã của bạn)

  2. Từ khóa gỡ lỗi. Thêm debugger;vào các vị trí bạn muốn gỡ lỗi và mở bảng điều khiển dành cho nhà phát triển của trình duyệt và điều hướng đến tab nguồn.

Để biết thêm các công cụ và cách mà bạn gỡ lỗi Mã JavaScript, được đưa ra trong liên kết này bởi W3School .


1
+1 và sử dụng console.log cũng hữu ích để xác định mã của bạn, vì thông thường tệp / dòng # được hiển thị bên cạnh thông báo và bạn có thể nhấp vào nó để mở mã của mình trong trình gỡ lỗi, đặt điểm dừng, v.v.
John Henckel

0

Tôi không khuyến nghị debugger;nếu bạn chỉ muốn giết và dừng mã javascript, vì debugger;sẽ tạm thời đóng băng mã javascript của bạn và không dừng mã vĩnh viễn.

Nếu bạn muốn giết đúng cách và dừng mã javascript theo lệnh của bạn, hãy sử dụng như sau:

throw new Error("This error message appears because I placed it");

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.