Làm cách nào để gỡ lỗi mã JavaScript của tôi? [đóng cửa]


113

Khi tôi phát hiện ra rằng tôi có một đoạn mã có vấn đề, tôi nên làm thế nào để gỡ lỗi nó?

Câu trả lời:


78

Firebug là một trong những công cụ phổ biến nhất cho mục đích này.


8
Liên kết nó lên: getfirebug.com
Annika Backstrom

7
Tôi thích firebug, nhưng tôi sẽ không khẳng định nó là đầu và vai trên thanh tra của webkit.
Ryan Florence

2
Firebug đã đi trước thời điểm khi nó được ra mắt, nhưng tôi không nghĩ nó là công cụ tốt nhất, so với các công cụ khác đã ra mắt gần đây.
James

Tôi đang sử dụng Firebug kể từ khi tôi phát hiện ra nó và nó giúp tôi rất nhiều! console.debug, profiler, the tra ...
Julio Greff.

@NinaScholz Giờ đây, tất cả các trình duyệt đều đi kèm với jetpack theo mặc định!
oneCoderToRuleThemAll

74

Tất cả các trình duyệt hiện đại đều có một số dạng ứng dụng gỡ lỗi JavaScript tích hợp sẵn. Chi tiết về những điều này sẽ được đề cập trên các trang web công nghệ liên quan. Sở thích cá nhân của tôi để gỡ lỗi JavaScript là Firebug trong Firefox. Tôi không nói Firebug tốt hơn bất kỳ loại nào khác; nó phụ thuộc vào sở thích cá nhân của bạn và bạn có thể nên kiểm tra trang web của mình trong tất cả các trình duyệt (lựa chọn đầu tiên của cá nhân tôi luôn là Firebug).

Tôi sẽ trình bày một số giải pháp cấp cao bên dưới, sử dụng Firebug làm ví dụ :

Firefox

Firefox đi kèm với công cụ gỡ lỗi JavaScript có sẵn của riêng nó, nhưng tôi khuyên bạn nên cài đặt tiện ích Firebug . Điều này cung cấp một số tính năng bổ sung dựa trên phiên bản cơ bản rất tiện dụng. Tôi sẽ chỉ nói về Firebug ở đây.

Sau khi cài đặt xong Firebug, bạn có thể truy cập nó như sau:

Đầu tiên, nếu bạn nhấp chuột phải vào bất kỳ phần tử nào, bạn có thể Kiểm tra phần tử bằng Firebug :

Kiểm tra phần tử trong Firebug

Nhấp vào đây sẽ mở ra ngăn Firebug ở cuối trình duyệt:

Ngăn Firebug

Firebug cung cấp một số tính năng nhưng cái mà chúng tôi quan tâm là tab tập lệnh. Nhấp vào tab script sẽ mở ra cửa sổ này:

Tab tập lệnh

Rõ ràng, để gỡ lỗi, bạn cần nhấp vào tải lại :

JavaScript trong tab sctipt

Bây giờ bạn có thể thêm các điểm ngắt bằng cách nhấp vào dòng bên trái của đoạn mã JavaScript mà bạn muốn thêm điểm ngắt vào:

Thêm các điểm ngắt

Khi điểm ngắt của bạn bị chạm, nó sẽ giống như bên dưới:

Một điểm dừng bị đánh

Bạn cũng có thể thêm các biến đồng hồ và thường làm mọi thứ mà bạn mong đợi trong một công cụ gỡ lỗi hiện đại.

Xem các biến thể

Để biết thêm thông tin về các tùy chọn khác nhau được cung cấp trong Firebug, hãy xem Câu hỏi thường gặp về Firebug .

Trình duyệt Chrome

Chrome cũng có riêng của mình trong xây dựng Javascript gỡ lỗi tùy chọn, mà làm việc theo một cách rất giống nhau, kích chuột phải, kiểm tra nguyên tố vv . Hãy xem Công cụ dành cho nhà phát triển Chrome . Tôi thường thấy dấu vết ngăn xếp trong Chrome tốt hơn Firebug.

trình duyệt web IE

Nếu bạn đang phát triển trong .NET và sử dụng Visual Studio bằng môi trường phát triển web, bạn có thể gỡ lỗi mã JavaScript trực tiếp bằng cách đặt các điểm ngắt, v.v. Mã JavaScript của bạn trông giống hệt như khi bạn gỡ lỗi mã C # hoặc VB.NET .

Nếu bạn không có điều này, Internet Explorer cũng cung cấp tất cả các công cụ được hiển thị ở trên. Thật khó chịu, thay vì nhấp chuột phải để kiểm tra các tính năng phần tử của Chrome hoặc Firefox, bạn truy cập các công cụ dành cho nhà phát triển bằng cách nhấn F12 . Câu hỏi này bao gồm hầu hết các điểm.


... Bạn phải có nó trong bộ đệm sao chép-dán sẵn sàng để sử dụng, phải không? :)
Christian Ternus


3
Xin lỗi, tôi hoàn toàn nhớ rằng nó đã được hỏi và trả lời bởi cùng một người! Tôi nghĩ rằng bạn có một số loại Copypasta Javascript Debug mà bạn đưa vào mỗi khi ai đó hỏi câu hỏi này.
Christian Ternus

54
  • Internet Explorer 8 (Công cụ dành cho nhà phát triển - F12). Bất cứ điều gì khác là tỷ lệ thứ hai trong vùng đất Internet Explorer
  • Firefox và Firebug . Nhấn F12để hiển thị.
  • Safari (Hiển thị Thanh menu, Tùy chọn -> Nâng cao -> Hiển thị thanh menu Phát triển )
  • Bảng điều khiển JavaScript của Google Chrome ( F12hoặc ( Ctrl+ Shift+ J)). Chủ yếu là cùng một trình duyệt với Safari, nhưng Safari tốt hơn IMHO.
  • Opera ( Công cụ -> Nâng cao -> Công cụ dành cho nhà phát triển )

1 opera js debugger đưa ra một thông báo lỗi tốt hơn thì tất cả phần còn lại
Gabriel Solomon

3
Mặc dù vào năm 2009, Safari có thể đã vượt xa các công cụ dành cho nhà phát triển Chromes vào năm 2014, tôi sẽ thực hiện gỡ lỗi trong Chrome qua Safari bất kỳ ngày nào trong tuần. Công cụ nhà phát triển Chrome và Firebug của Firefox là đỉnh cao ... và mặc dù vụng về để sử dụng vẫn công cụ dev IE11 của có lẽ ở vị trí thứ 3 ( IMHO )
scunliffe

29

Có một từ khóa trình gỡ lỗi trong JavaScript để gỡ lỗi mã JavaScript. Đặt trình gỡ lỗi; đoạn mã trong mã JavaScript của bạn. Nó sẽ tự động bắt đầu gỡ lỗi mã JavaScript tại thời điểm đó.

Ví dụ:

Giả sử đây là tệp test.js của bạn

function func(){
    //Some stuff
    debugger;  //Debugging is automatically started from here
    //Some stuff
}
func();
  • Khi trình duyệt chạy trang web trong tùy chọn dành cho nhà phát triển với trình gỡ lỗi được bật, sau đó nó sẽ tự động bắt đầu gỡ lỗi từ trình gỡ lỗi; điểm.
  • Cần mở cửa sổ trình duyệt dành cho nhà phát triển.

Trên Safari, nó đôi khi hoạt động và đôi khi không. Tôi chắc chắn đó là một số điều về cuối của tôi. FWIW Tôi đã bật Tự động Hiển thị Trình kiểm tra Web cho JSContexts.
1,21 gigawatts

21

Tôi sử dụng printfcách tiếp cận tốt cũ (một kỹ thuật cổ xưa sẽ hoạt động tốt trong bất kỳ thời điểm nào).

Nhìn vào phép thuật %o:

console.log("this is %o, event is %o, host is %s", this, e, location.host);

%okết xuất nội dung có thể nhấp và duyệt sâu, được in đẹp của đối tượng JS. %sđã được hiển thị chỉ để ghi lại.

Và điều này:

console.log("%s", new Error().stack);

cung cấp cho bạn dấu vết ngăn xếp giống như Java đến điểm new Error()gọi (bao gồm đường dẫn đến tệp và số dòng !!).

Cả hai %onew Error().stackcó sẵn trong Chrome và Firefox.

Với những công cụ mạnh mẽ như vậy, bạn đưa ra giả định có gì sai trong JS của mình, hãy đặt đầu ra gỡ lỗi (đừng quên bọc trong ifcâu lệnh để giảm lượng dữ liệu) và xác minh giả định của bạn. Khắc phục sự cố hoặc đưa ra giả định mới hoặc đưa thêm đầu ra gỡ lỗi cho vấn đề bit.

Cũng để sử dụng dấu vết ngăn xếp:

console.trace();

như nói Console

Chúc bạn hack vui vẻ!


2
+1 cho console.trace (); Câu trả lời khác với phần còn lại.
Saurabh Patil,

12

Bắt đầu với Firebug và IE Debugger.

Hãy cẩn thận với trình gỡ lỗi trong JavaScript. Thỉnh thoảng chúng sẽ ảnh hưởng đến môi trường đủ để gây ra một số lỗi mà bạn đang cố gắng gỡ lỗi.

Ví dụ:

Đối với Internet Explorer, nó thường chậm dần và là một loại đối phó với loại rò rỉ bộ nhớ. Sau nửa giờ hoặc lâu hơn, tôi cần khởi động lại. Nó dường như là khá đều đặn.

Đối với Firebug, có lẽ đã hơn một năm nên nó có thể là phiên bản cũ hơn. Do đó, tôi không nhớ chi tiết cụ thể, nhưng về cơ bản thì mã chạy không chính xác và sau khi cố gắng gỡ lỗi một lúc, tôi đã tắt Firebug và mã hoạt động tốt.


9

Mặc dù alert(msg);hoạt động trong các tình huống "Tôi chỉ muốn tìm hiểu xem chuyện gì đang xảy ra" ... mọi nhà phát triển đều gặp phải trường hợp mà bạn kết thúc với một vòng lặp (rất lớn hoặc vô tận) mà bạn không thể thoát ra.

Tôi khuyên bạn rằng trong quá trình phát triển nếu bạn muốn có tùy chọn gỡ lỗi trực tiếp, hãy sử dụng tùy chọn gỡ lỗi cho phép bạn thoát ra. (PS Opera, Safari? Và Chrome? Tất cả đều có sẵn điều này trong hộp thoại gốc của chúng)

//global flag
_debug = true;
function debug(msg){
  if(_debug){
    if(!confirm(msg + '\n\nPress Cancel to stop debugging.')){
      _debug = false;
    }
  }
}

Với những điều trên, bạn có thể đưa mình vào một vòng lặp lớn của gỡ lỗi cửa sổ bật lên, trong đó nhấn Enter/ Okcho phép bạn chuyển qua từng thông báo, nhưng nhấn Escape/ Cancelcho phép bạn thoát ra một cách độc đáo.


6

Tôi sử dụng bảng điều khiển / menu dành cho nhà phát triển của WebKit (Safari 4). Nó gần giống với Firebug.

console.log()là màu đen mới - tốt hơn nhiều so với alert().


2
Nếu bạn đặt console.log lên toàn bộ mã của mình, hãy nhớ xóa chúng vì nó sẽ phá vỡ IE.
Liam

5

Bước đầu tiên của tôi luôn là xác thực HTML và kiểm tra cú pháp với JSLint . Nếu bạn có đánh dấu sạch và mã JavaScript hợp lệ thì đã đến lúc Firebug hoặc trình gỡ lỗi khác.


@Ken Link bị hỏng :(
Thirisangu Ramanathan

@Thirisangu Cảm ơn bạn! Liên kết cố định
Ken

3

Visual Studio 2008 có một số công cụ gỡ lỗi JavaScript rất tốt. Bạn có thể thả một điểm ngắt trong mã JavaScript phía máy khách của mình và thực hiện từng bước bằng cách sử dụng các công cụ giống hệt như bạn làm với mã phía máy chủ. Không cần phải đính kèm vào một quy trình hoặc làm bất cứ điều gì phức tạp để kích hoạt nó.


3

Tôi sử dụng một số công cụ: Fiddler , Firebug và Visual Studio. Tôi nghe nói Internet Explorer 8 có một trình gỡ lỗi tích hợp sẵn tốt.


"Fiddler" có nghĩa là Fiddler Web Debugger?
Thomas L Holaday

3

Tôi đã từng sử dụng Firebug , cho đến khi Internet Explorer 8 ra mắt. Tôi không phải là một fan hâm mộ lớn của Internet Explorer, nhưng sau một thời gian sử dụng các công cụ dành cho nhà phát triển tích hợp sẵn, bao gồm một trình gỡ lỗi thực sự tốt đẹp, thì việc sử dụng bất kỳ thứ gì khác dường như là vô ích. Tôi phải ngả mũ trước Microsoft, họ đã làm rất tốt công cụ này.


2
Để gỡ lỗi cơ bản, trình gỡ lỗi IE8 phù hợp với hầu hết các nhu cầu của tôi. Tuy nhiên, nếu bạn đang thực hiện bất kỳ loại kiểm tra hiệu suất nào, bạn sẽ nhanh chóng thấy thiếu IE. Gần đây tôi đã có một dự án sử dụng một số javascript nặng và chúng tôi thực sự cần phải cắt bớt mọi thứ cho các hệ thống kém hơn, vì chúng tôi đang gặp phải "lỗi tập lệnh không phản hồi" đáng sợ. Firebug là vô giá trong trường hợp này, vì tôi có thể chạy phương thức console.profile () để tìm ra nơi mà tất cả thời gian của tôi đã được sử dụng.
Gavin

1
Trình gỡ lỗi IE8 cũng có một tính năng hồ sơ (mặc dù không bằng đồ họa như FireBug) cung cấp cây cuộc gọi, số lượng cuộc gọi và thời gian dành cho mỗi phương thức. Tôi thấy điều này đủ để cô lập mã JS nào mất quá nhiều thời gian.
James

3

Bạn cũng có thể xem Trình ghi nhật ký YUI . Tất cả những gì bạn phải làm để sử dụng nó là bao gồm một vài thẻ trong HTML của bạn. Nó là một bổ sung hữu ích cho Firebug, ít nhiều phải có.


JQuery không có chức năng tương tự?
shapr

2

Tôi thấy phiên bản mới của Internet Explorer 8 (báo chí F12) rất tốt để gỡ lỗi mã JavaScript.

Tất nhiên, Firebug là tốt nếu bạn sử dụng Firefox.


2

Bên cạnh việc sử dụng trình gỡ lỗi JavaScript của Visual Studio, tôi đã viết bảng điều khiển đơn giản của riêng mình mà tôi đưa vào một trang. Nó đơn giản giống như cửa sổ ngay lập tức của Visual Studio. Tôi có thể thay đổi giá trị của biến, gọi hàm và xem giá trị của biến. Nó chỉ đơn giản là đánh giá mã được viết trong trường văn bản.


2

Tôi đang sử dụng Venkman , một trình gỡ lỗi JavaScript cho các ứng dụng XUL .


2

Ngoài Firebug và các tiện ích mở rộng dành cho nhà phát triển gốc của trình duyệt, JetBrains WebStorm IDE đi kèm với hỗ trợ gỡ lỗi từ xa cho Firefox và Chrome (Cần có tiện ích mở rộng) được tích hợp sẵn.

Cũng hỗ trợ:

Các tùy chọn để kiểm tra điều này miễn phí là 30 bản dùng thử hoặc sử dụng Phiên bản Truy cập Sớm .


2

Nếu bạn đang sử dụng Visual Studio , chỉ cần đặt debugger;mã bạn muốn gỡ lỗi lên trên. Trong quá trình thực thi, điều khiển sẽ tạm dừng tại nơi đó và bạn có thể gỡ lỗi từng bước từ đó trở đi.


1

Như với hầu hết các câu trả lời, nó thực sự phụ thuộc: Bạn đang cố gắng đạt được điều gì với việc gỡ lỗi của mình? Phát triển cơ bản, sửa chữa các vấn đề về hiệu suất? Đối với sự phát triển cơ bản, tất cả các câu trả lời trước đây là quá đủ.

Để kiểm tra hiệu suất cụ thể, tôi khuyên bạn nên dùng Firebug. Có thể xác định được phương pháp nào là tốn kém nhất về mặt thời gian là vô giá đối với một số dự án tôi đã thực hiện. Khi các thư viện phía máy khách ngày càng trở nên mạnh mẽ hơn và trách nhiệm nhiều hơn được đặt cho phía máy khách nói chung, loại gỡ lỗi và lập hồ sơ này sẽ chỉ trở nên hữu ích hơn.

API bảng điều khiển Firebug: http://getfirebug.com/console.html


0

Bằng cách nhấnF12 các nhà phát triển web có thể nhanh chóng gỡ lỗi mã JavaScript mà không cần rời khỏi trình duyệt. Nó được tích hợp trong mọi cài đặt của Windows.

Trong Internet Explorer 11 , các công cụ F12 cung cấp các công cụ gỡ lỗi như điểm ngắt, xem và xem biến cục bộ cũng như bảng điều khiển cho các thông báo và thực thi mã ngay lập tức.


vui lòng xem liên kết này: w3schools.com/js/js_debugging.asp nữa
Reza
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.