2009-12-21 29 views
12

Tôi đã thừa kế một đống mã đang làm những điều không mong muốn khi tôi nhấp vào một số yếu tố <button>.Nói với Firebug để phá vỡ ngay sau khi bất kỳ Javascript nào được thực thi

Trang này có nhiều Javascript và không rõ sự kiện, nếu có, sự kiện đã được thiết lập trên nút hoặc phần tử gốc của nó. Tôi đang cố gắng tìm nơi bắt đầu thực hiện để tôi có thể gỡ lỗi những gì đang diễn ra.

Có cách nào để có Firebug (hoặc bất kỳ trình gỡ lỗi Javascript) nào bị vỡ bất cứ khi nào bất kỳ mã JavaScript nào được thực thi không? Có lẽ một cách nào đó để thiết lập một điểm ngắt trên mỗi dòng lập trình? Hoặc là có một số cách khác để tìm ra sự kiện mà nút đang phản hồi (trang người dùng boh Prototype, jQuery và một số Javascript tùy chỉnh. Tôi biết.)

Trả lời

12

Chỉ cần nhấn nút Tạm dừng trên bảng điều khiển firebug (ở bên trái- góc trên cùng của nó, hai đường thẳng đứng màu vàng, khi tab Script được chọn) - và nó sẽ dừng lại ở chuỗi JS đầu tiên.

Nhưng nó sẽ dừng JS thực thi ở bất kỳ sự kiện nào - vì vậy nếu bạn có nút di chuyển chuột và nhấp chuột - tôi sẽ không thể dừng khi nhấp chuột, vì tập lệnh sẽ dừng khi di chuyển chuột mỗi lần bạn cố gắng di chuyển chuột qua nút này. Tôi đề nghị bạn chỉ cần chèn cảnh báo() ở những nơi đáng ngờ - sau một số lần lặp, bạn sẽ tìm thấy chính xác chuỗi bạn cần (nơi xảy ra lỗi).

+1

Trong một số trường hợp, bạn có thể gặp phải vấn đề di chuyển/nhấp chuột. Đối với một nút hoặc bất kỳ phần tử nào khác có thể nhận tiêu điểm, bạn có thể tab đến phần tử đó và nhấn dấu cách hoặc nhập để kích hoạt sự kiện nhấp. –

+1

Hmmm, +1 cho thông tin tốt, mặc dù cách nhấn vào nút đó dường như không hoạt động trên trang cụ thể này (trong đó, javascript khôn ngoan, là một chút lộn xộn). Nút làm điều phát sáng nhỏ của nó, nhưng kích hoạt các hành động javascript trên trang không đá trình gỡ rối vào cuộc sống. –

+0

Cùng một vấn đề ở đây. Không thể dừng lại trên: \t setTimeout (function() { \t \t window.location = '/ someBad/nơi' \t}, 0); –

1

Nếu đây là vấn đề gỡ lỗi chung, bạn có thể sử dụng Trình kiểm tra web trong Safari/Chrome. Một tiền thưởng thêm là bạn có thể ném những tuyên bố sau vào mã JavaScript của bạn để kéo lên debugger:

... 
debugger; // Will trigger the debugger 
... 

Nếu không, bạn có thể đặt breakpoint, breakpoint có điều kiện, tạm dừng trên việc thực hiện tiếp theo, và tất cả các thủ thuật thông thường. Một số video hay có sẵn here.

Để phản hồi đề xuất alert trước đây. Tôi thực sự khuyên bạn nên sử dụng console.log hoặc console.dir nếu bạn có quyền truy cập vào trình gỡ lỗi. Bạn sẽ nhận được nhiều thông tin hơn mà không chặn thực thi tập lệnh của bạn. Ngoài ra, đừng quên rằng console.log có thể lấy nhiều thông số để bạn có thể in dữ liệu một cách độc đáo, bạn không phải hạn chế bản thân thành một chuỗi đơn lẻ như alert.

+0

Trình theo dõi web không giải quyết được sự cố này. Các hành vi không mong muốn không dừng lại trong thực thi. Mã đang thực thi đúng cách, nhưng không thực hiện những gì chúng ta muốn. Tôi cần tìm mã được kích hoạt bởi lần nhấp. –

+0

Nhận xét của tôi chỉ là một sự hồi sinh những gì đã được tuyên bố, chỉ với những lợi thế mà Thanh tra Web cung cấp. Tôi đang cố gắng chỉ ra rằng Firebug không phải là câu trả lời duy nhất. Nếu bạn muốn biết điều gì xảy ra khi nhấp chuột, hãy xem các trình lắng nghe sự kiện cho nút (và cha mẹ) của nơi bạn nhấp vào. Điều này có sẵn trong các đêm NightKit và phần mở rộng Eventbug được đề cập cho Firebug. –

2

Nếu bạn muốn xem những sự kiện nào được thiết lập trên trang, bạn cũng có thể thử Eventbug.

3

Đóng trình duyệt Internet và mở lại. "Break on next" sẽ bắt đầu hoạt động trở lại. Nếu không Firebug chỉ đơn giản là bỏ qua tùy chọn này sau một thời gian, và không phá vỡ nhưng chạy javascripts cho tất cả các sự kiện mà không cảnh báo bạn.

Các vấn đề liên quan