2010-12-12 11 views
13

Używam Firebug do wyświetlania błędów JavaScript. Ale używam również jQuery. Z jakiegoś powodu nigdy nie widzę błędów JavaScriptu podczas korzystania z jQuery i jest to jeden z największych problemów z pracą z jQuery.Zatrzymaj tłumienie błędów JavaScript

Nie ma konkretnego kodu do wyświetlenia, wystarczy wyobrazić sobie alert(areareg);, gdzie jest niezdefiniowany lub jakikolwiek błąd JavaScript, a Firebug nie powie mi o tym. JavaScript po prostu zawiedzie bez ostrzeżenia lub jakiegokolwiek powiadomienia. Dzieje się tak zawsze w każdym projekcie, w którym korzystałem z jQuery i jest to jedyny powód, dla którego nie lubię jQuery; ponieważ notorycznie trudno jest debugować, gdy coś idzie nie tak.

Z jakiegoś powodu miałem nawet problem ze znalezieniem tego pytania w Internecie, nie mówiąc już o odpowiedzi. Ale pomyślałem, że spróbuję tutaj:

  1. Czy istnieje sposób, aby jQuery przestał tłumić komunikaty o błędach?
  2. Czy jestem jedyną osobą na świecie, która zawsze miała ten problem z jQuery?

EDYTOWANIE: Używam zarówno Firefox (z Firebug) i Chrome, i używam tylko nieminified wersji jQuery. Nadal nigdy w życiu nie widziałem żadnego komunikatu o błędzie jQuery, ani użytecznego, ani bezużytecznego, ani tak naprawdę normalnych błędów JavaScriptu podczas korzystania z jQuery.

+0

większość metod takich jak hide, show itp. Dba o kontrolę zerową, nawet jeśli tego nie mamy id lub klasa nie rzuca erosami, dla celów debugowania jest trudne do znalezienia. – kobe

+0

Błędy, które opisujesz, nie będą obsługiwane przez jQuery i powinny być wyświetlane w Firebug i innych konsolach internetowych. Kilka osób w pokoju czatu javascript (http://chat.stackoverflow.com/rooms/17/javascript) wspomniało, że ostatnie wersje Firebug nie raportują błędów prawidłowo. Być może jest to powiązane - spróbuj przez jakiś czas debugować w innej przeglądarce, takiej jak Chrome. –

+1

@andy E, zgadzam się z tobą bardzo, zaktualizowałem firebug ostatnio i stojąc przed tym samym problemem, muszę kliknąć błędy, okno ostrzeżenia, aby sprawdzić błędy. – kobe

Odpowiedz

2

Używam Google Chrome do debugowania i jest całkiem niezły, pokazuje również wszystkie błędy jquery (jak powiedział Alfred, jeśli użyjesz wersji minified, nie będziesz miał żadnej sensownej nazwy w swoich błędach, więc lepiej jest użyj surowego źródła)

+2

Nie zdawałem sobie sprawy, jak cholernie wspaniałe są narzędzia do debugowania Google Chrome. Używałem jakiejś okaleczonej wersji Firebug dla Chrome. :) Google znów wygrywa! Dzięki! – Teekin

3

Cóż, pomimo twojego wrażenia, jQuery sama nie robi nic, aby "tłumić" komunikaty o błędach. Teraz Firefox robi mają tendencję do odrzucania pewnych rodzajów wyjątków, w szczególności jak to, co opisujesz. Często stwierdzam, że zawijanie całego bloku JavaScript w try ... catch za pomocą wywołania alertu w przypadku wyjątku może być użytecznym sposobem radzenia sobie z nim, ale nadal jest irytujące.

1

Mam ten sam problem w FF 18. Używam JSF i JQuery, choć zdarza się to nawet dla zwykłego kodu JS na stronie. Celowo umieszczam kod javascript, który powinien generować błąd składni bez słowa w Firebug. FF 18 ma wbudowaną konsolę przypominającą firebuga. Po wyłączeniu wtyczki firebug pojawiły się komunikaty console.log. Jednak błędy nadal nie są wyświetlane. Po prostu wypróbowałem Chrome i pojawiły się tam błędy.

0

Kilka razy natknąłem się na ten problem. Jest to dość niespójne i trudne do zreplikowania, czasami wydaje się, że jest związane z problemami z wersją. Ustawienia rzadko wydają się mieć znaczenie, chociaż "Break on next" czasami (nie zawsze) identyfikuje błędy, które w przeciwnym razie prześlizgują się.

Jedna rzecz, jaką zauważyłem, to zdarza się w przypadku kodu wywoływanego wewnątrz funkcji zwrotnej, np. ze zdarzenia interfejsu użytkownika lub z wywołania AJAX.Czasami Firefox/Firebug będzie się zachowywał jak innych przeglądarek i występów w konsoli błędów, czasami w ogóle nic nie daje nawet niewiarygodnie przypadkach jednoznacznych jak:

console.log('something'); // Shows up in console fine 
fail // Other browsers give undefined variable error, Firefox gives nothing 
console.log('something else'); // Never reached, so silent error clearly happens 

Najlepszym rozwiązaniem znalazłem na to:

  • Po znalezieniu błędu niepojawienia pracować z powrotem za pomocą console.trace() aż dojdziesz do punktu, w którym wewnątrz funkcji, błąd jest ukryty, na zewnątrz, pokazuje, dodając jakiś fragment kodu, takich jak:

    console.trace(); 
    fail // cause the error, look out for a trace followed by nothing 
    
  • Jeśli jest to wywołanie AJAX, ręcznie dodać podstawowej obsługi błędów, bo z jakiegoś powodu Firefox/Firebug traci domyślnie:

    $.ajax({ 
        error: function(a,b,c){ 
        throw c; 
        }, 
        other: '...settings' 
    } 
    
    • Jeśli jest coś, co może dodaj funkcję obsługi błędów, zapakuj ją i wypróbuj ... catch, na przykład:
    try { 
        // whatever the code is within which there are no errors 
    } catch(err){ 
        throw err; 
    } 
    

To powinno wystarczyć, aby złapać wszystkie błędy, gdzie jak dotąd są one objęte zakresem gdzie Firefox jest ich utraty. Uważaj na przypadki, w których masz wywołanie zwrotne w ramach wywołania zwrotnego, być może trzeba to zrobić dwa razy ...

Powiązane problemy