2012-04-06 17 views
5

Tôi nhận thấy rằng với Firefox/Firebug (môi trường phát triển chính của tôi), một số lỗi tạo ra dấu vết ngăn xếp, trong khi những người khác thì không. Lúc đầu, tôi nghĩ rằng điều này có liên quan đến việc tôi đã tạo ra lỗi hay không (ví dụ: Lỗi mới ("foo")) hay Javascript đã tạo ra nó (ví dụ: undefinedFoo + = 1), nhưng tôi đã nhận thấy nó xảy ra với cả hai loại lỗi.Với Firefox/Firebug, Tại sao bạn chỉ nhận Stacktraces với một số lỗi

Vì vậy, câu hỏi của tôi là, không ai biết điều gì gây ra điều này? Là nó ngẫu nhiên hoặc là có một số mô hình/logic với nó? Có phải chỉ là Firefox và/hoặc Firebug bị què hay làm các trình duyệt khác thực hiện điều này không? Và quan trọng nhất, có bất kỳ điều gì tôi có thể làm để kiểm soát nó (đặc biệt để làm cho nó luôn luôn cho tôi ngăn xếp dấu vết)?

Đây không phải là một câu hỏi quan trọng (vì tôi luôn có thể ném "console.trace()" ngay trước khi bất kỳ lỗi nào xảy ra), nhưng tôi tò mò nếu có ai biết câu trả lời.

********** EDIT **********

tôi thấy chủ đề này: http://groups.google.com/group/firebug/browse_thread/thread/1f32df8b96ec1d30/64b9074cb99056c2?pli=1 mà nói rằng Firefox không cung cấp Firebug với stacktraces nếu lỗi không phải là một trường hợp Lỗi. Nói cách khác, nếu bạn ném một cái gì đó không phải là lỗi mới ("foo"), bạn sẽ không nhận được một stacktrace.

Tuy nhiên, điều này không giúp tôi, vì tôi không thấy stacktraces ngay cả khi tôi ném Lỗi mới().

+0

Mặc dù tôi nghi ngờ nó quan trọng, tôi có lẽ nên đề cập rằng tôi đang trên Linux (trên cơ hội ra rằng Firefox có một lỗi cụ thể Linux với mất stacktrace). – machineghost

+0

Tôi có phải là người duy nhất gặp lỗi stack-trace-less trong Firefox không? Hay những người khác nhìn thấy chúng, và không ai biết tại sao Firefox lại làm như vậy? – machineghost

+1

Tôi tìm thấy câu trả lời một phần. Nó chỉ ra rằng Firebug có một "bí mật" (tức là. About: config) sở thích mà làm cho nó không hiển thị stacktraces: extensions.firebug.showStackTrace. Khi tôi kiểm tra about: config, tôi thấy rằng tùy chọn này đã được đặt thành false (điều này là lạ, vì tôi không nhớ đã từng làm điều đó ...). Tuy nhiên, ngay cả khi nó được đặt thành true (và ngay cả sau khi tôi khởi động lại Firefox), tôi vẫn không thấy dấu vết ngăn xếp trên một số lỗi :-( – machineghost

Trả lời

2

Tôi đã tìm thấy nó! Nó chỉ ra mô hình mô-đun là vấn đề. Dưới đây là ví dụ đơn giản:

var OuterModule = (function(module){ 
    module.throwError = function() { 
     throw new Error("This has no stack trace!"); 
    }; 
    return module; 
})({}); 
OuterModule.throwError(); 

Vì mô hình mô-đun ẩn chức năng throwError bên trong phạm vi của mô-đun, Firebug/Firefox không thể theo dõi đúng cách.

Con người mất mãi mãi tìm ra; Hy vọng rằng một người khác sẽ được hưởng lợi từ sự đau khổ của tôi :-)

+0

Như một lưu ý, điều này rõ ràng không phải là giới hạn cố hữu của Firebug/Firefox, bởi vì nếu bạn thêm một "console.trace()" ngay trước khi bạn ném Lỗi mới, bạn sẽ nhận được một dấu vết ngăn xếp hoàn toàn có thể sử dụng được.Vì vậy, vấn đề không phải là Firefox không thể xử lý các dấu vết ngăn xếp bắt nguồn từ bên trong "mô-đun"; vấn đề là Firefox dường như gặp khó khăn khi kết nối các dấu vết ngăn xếp đó với các lỗi xảy ra bên trong "các mô-đun" – machineghost

+0

Tôi nhận thấy hành vi tương tự và cũng có cảm giác nó liên quan đến lỗi của ứng dụng được ném với ** Lỗi mới **. ném bởi hệ thống - Cảm ơn bài đăng này! –

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