5

Đây là một câu hỏi khá phức tạp mà có thể đơn giản là không thể với những gì hiện có sẵn, nhưng nếu có một cách dễ dàng để làm điều đó nó sẽ là rất lớn.Điểm ngắt không (dấu vết) trong Javascript?

Tôi đang gỡ lỗi một số JavaScript trong Chrome và vì nó rất hướng sự kiện, tôi thích nhận báo cáo theo dõi mã (cái được gọi, v.v.) thay vì điểm ngắt. Vì vậy, bất cứ nơi nào tôi rời khỏi một breakpoint, tôi muốn xem tên hàm và các đối số cục bộ.

Gần nhất tôi có thể nhận được là để thả một breakpoint có điều kiện ở, như sau:

Sample trace

Có hai vấn đề lớn với cách tiếp cận này:

  1. dán này vào mỗi breakpoint quá cồng kềnh. Mọi người sẽ có nhiều khả năng sử dụng nó hơn nếu nó có thể được chọn làm hành động mặc định cho mỗi điểm ngắt.
  2. Trong Google Chrome, các cuộc gọi đăng nhập được kích hoạt hai lần.

Bất kỳ ý tưởng nào về cách khắc phục một trong những vấn đề này? Tôi nghĩ rằng nó có thể là có thể trong IE with VS, nhưng giao diện người dùng có vẻ như cồng kềnh.

+1

Nếu bạn chỉ cần điều này để truy tìm sự kiện DOM, bạn có thể thử sử dụng phương pháp ['monitorEvents()'] (http://www.briangrinstead.com/blog/chrome-developer-tools-monitorevents) của bảng điều khiển. – kpozin

+0

Tôi thực sự đã thử sử dụng monitorEvents tại một thời điểm, bằng cách ném các sự kiện giả cho các đối tượng không phải DOM. Bạn có thể nhận được khá xa bằng cách theo dõi lỗi, nhưng nó không có bộ lọc hạt mịn tôi cần. – Chris

Trả lời

0

tôi không thể tìm thấy một cái gì đó để làm điều này, vì vậy tôi wrote my own.

Bây giờ, thay vì liên tục chèn và loại bỏ các cuộc gọi console.log, tôi rời khỏi đăng nhập và chỉ xem nó khi cần thiết.

Cảnh báo: mã cụ thể dưới đây là chưa được kiểm tra.

var debug = TraceJS.GetLogger("debug", "mousemove"); 
$('div').mousemove(function(evt) { 
    debug(this.id, evt); 
}); 

Mỗi khi chuột di chuyển trên một DIV, nó tạo ra một logevent tagged [ "MouseMove", {id của yếu tố đó}]

Các phần thú vị là khả năng chọn lọc xem sự kiện. Khi bạn chỉ muốn xem các sự kiện MouseMove cho các phần tử #A, hãy gọi sau trong giao diện điều khiển:

TraceJS('a'); 

Khi tôi muốn xem tất cả các sự kiện MouseMove, bạn có thể gọi:

TraceJS('mousemove'); 

Chỉ sự kiện phù hợp với bộ lọc của bạn được hiển thị. Nếu bạn gọi TraceJS (không có đối số), các cuộc gọi nhật ký sẽ ngừng hiển thị.

1

Lựa chọn tốt nhất mà tôi tìm thấy là để chỉnh sửa mã javascript trong bảng javascript của Chrome, thêm một console.log.

Nó sẽ chỉ hoạt động sau khi trang được tải (trừ khi bạn có thể đặt điểm ngắt sau khi làm mới và sau đó thêm dòng ghi nhật ký) và (tồi tệ hơn) bạn sẽ phải thực hiện mỗi khi bạn tải lại trang.

Chúc may mắn với tìm kiếm của bạn!

1

IE11 hiện có "tracepoints", độc lập với Visual Studio. Họ làm chính xác những gì bạn đã hỏi trong ba năm trước. Tôi chưa thấy chúng trong Chrome hoặc bất kỳ trình duyệt nào khác, nhưng hy vọng chúng sẽ sớm phát hành!

+0

Tuyệt! https://msdn.microsoft.com/en-us/library/ie/dn255007(v=vs.85).aspx Tôi thực sự thích thư viện mà tôi đã thiết lập ngay bây giờ vì tôi có thể để lại dấu vết trong mọi lúc và biến chúng và tắt khi cần thiết. Đoán đó là những gì xảy ra. – Chris

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