Прекратить подавление ошибок JavaScript

Я использую Firebug для просмотра ошибок JavaScript. Но я также использую jQuery. По какой-то причине я никогда не вижу ошибок JavaScript при использовании jQuery, и это одна из самых больших проблем с работой с jQuery в первую очередь.

Нет конкретного кода для показа, просто представьте alert(areareg);, где areareg есть undefined или любая ошибка JavaScript, и Firebug не расскажет мне об этом. JavaScript будет просто терпеть неудачу без предупреждения или уведомления любого рода. Это всегда так, в любом проекте, где я использовал jQuery, и это единственная причина, по которой мне не нравится jQuery; потому что его, как известно, трудно отлаживать, когда что-то идет не так.

По какой-то причине мне даже не удалось найти этот вопрос, поднятый в Интернете, не говоря уже о том, что он ответил. Но я решил, что я попробую здесь:

  • Есть ли способ заставить jQuery остановить подавление сообщений об ошибках?
  • Я единственный в мире, у которого всегда была эта проблема с jQuery?

EDIT: Я использую Firefox (с Firebug) и Chrome, и я использую только неминифицированную версию jQuery. Тем не менее, я никогда в жизни не видел сообщения об ошибке jQuery любого типа, ни полезные, ни бесполезные, ни на самом деле обычные ошибки JavaScript при использовании jQuery.

Ответы

Ответ 1

Я использую google Chrome для моей отладки, и это довольно хорошо, оно также показывает все ошибки jquery (как сказал Альфред, если вы используете сокращенную версию, вы не получите никакого значимого имени в своих ошибках, поэтому лучше использовать исходный источник)

Ответ 2

Хорошо, несмотря на ваше впечатление, jQuery сам не делает ничего, чтобы "подавлять" сообщения об ошибках. Теперь Firefox делает, как правило, отбрасывает определенные виды исключений, особенно как то, что вы описываете. Я часто нахожу, что обертывание целого блока Javascript в try ... catch с вызовом предупреждения, если исключение произойдет, - это полезный способ справиться с этим, но он все еще раздражает.

Ответ 3

У меня такая же проблема в FF 18. Я использую JSF и JQuery, хотя это происходит даже для простого JS-кода на странице. Я намеренно помещаю javascript-код, который должен вызывать синтаксическую ошибку без слова в Firebug. FF 18 имеет встроенную консоль, похожую на Firebug. Когда я отключил плагин firebug, появились сообщения console.log. Однако ошибки все еще не отображаются. Я просто попробовал Chrome, и там появились ошибки.

Ответ 4

Я сталкивался с этой проблемой несколько раз. Это довольно непоследовательно и трудно реплицировать, иногда это похоже на проблемы с версией. Настройки редко, похоже, имеют значение, хотя иногда и "Break on next" (не всегда) идентифицируют ошибки, которые в противном случае проскальзывают.

Одна вещь, которую я заметил, это, как правило, для кода, который запускается внутри функции обратного вызова, например. от события пользовательского интерфейса или от вызова AJAX. Иногда Firefox/Firebug будет вести себя как другие браузеры и показывать ошибки в консоли, иногда он ничего не дает даже для невероятно четких случаев, таких как:

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

Лучший подход, который я нашел к этому:

  • После того, как вы обнаружили ошибку отсутствия показа, вернитесь с помощью console.trace(), пока не дойдете до точки, где внутри функции, ошибка скрыта, снаружи, она показывает, добавляет некоторый фрагмент кода, например:

     console.trace();
     fail // cause the error, look out for a trace followed by nothing
    
  • Если это вызов AJAX, вручную добавьте основной обработчик ошибок, потому что по какой-либо причине Firefox/Firebug теряет значение по умолчанию:

     $.ajax({
       error: function(a,b,c){
         throw c;
       }, 
       other: '...settings'
     }
    
    • Если это что-то, вы не можете добавить функцию обработки ошибок, оберните ее в try... catch, например:
     try {
       // whatever the code is within which there are no errors
     } catch( err ){
       throw err;
     }
    

Этого должно быть достаточно, чтобы поймать все ошибки там, где они находятся в пределах области, где Firefox их теряет. Остерегайтесь случаев, когда у вас есть обратный вызов в обратном вызове, хотя вам может понадобиться сделать это дважды...