ПредишенСледващото


Тя ще изглежда - но това, което е там, за да кажеш? И все пак, това е очевидно. Но въпросът, че аз попитах с изненадваща честота. Да, и аз имам какво да кажа.

Дайте конкретни примери и да ви кажа как съм ги решен.

Ние виждаме целта, а не да се види на препятствия


Ето основните браузъри и отстраняване на грешки инструменти:
  • Firefox:
    Ние всички обичани Firebug плъгин
  • Safari. Chrome:
    Вграденият WebKit уеб инспектор
  • Opera:
    Прекрасна застроена Dragonfly
  • Internet Explorer 8:
    Вградени инструменти за разработчици
  • Internet Explorer <= 7
    Има много възможности:
    DebugBar. Companion.JS. чрез MS Visual Studio ...
    Но аз имам всички тези неща като нещо не закачен - те са или тромави или неудобно, или пътни такси :)
    И той ме хвана сам Script Debugger. Той е много спартански, но това е всичко, което имам нужда.

Във всички тези инструменти за отстраняване на грешки, ние се интересуваме breakpoint'y:

А ето и малко "екстри» - условни точки на прекъсване (кликнете с десния бутон върху "точка на пречупване"):

Това означава, че ние започваме глобална променлива (например) allowBreakpoints и "гранични стойности" ще се задейства само когато правим това, което искаме.
Съжаляваме, че не работи навсякъде, така че аз обикновено не се използват.

Както "спирачки" поток

Той е безопасен за употреба в:
  • Firefox с включен Firebug'om
  • Safari, Chrome с отворен / включен уеб инспектор / Script Panel
  • Internet Explorer 8, отваряне / скрипт Developer Tools
  • Internet Explorer <= 7 с установленным Script Debugger
  • Opera отворен / активиран Dragonfly

И не се страхувайте да се напише дебъгер в кода си - грешката е никога да предизвика.

Но възможността за условно спиране:
IF (allowBreakpoints == вярно)
дебъгер;

* Този код е подчертана с изходен код за открояване.
Харесвам го много повече от набор "прекъсване": така че аз пиша кода и да го отстраняване на грешки в действителност на едно място, а не две.

Debug чрез предупреждение ()

игрални точки на прекъсване

Защо? Ако времето за спиране на скрипта, бяха лансирани AJAX заявка или Timeout и отговор не се върне - той вече не може да се върне някога. Съгласете се, в съвременните уеб-проекти тази добра достатъчни. Ето защо, по време на "стоп извънредно положение" сценарий, вече не можем да адекватно debug'at след това - част от логиката, ще бъдат загубени завинаги.

Така че аз се опитвам да се избегне в практиката за отстраняване на грешки спиране.

"Право» отстраняване на грешки


Накратко: добро отстраняване на грешки - чрез сеч. Така че в общи линии работи и - на точното място в точното време задейства console.log (.).

Да, за console.log - за първи път този метод е да се види по света, доколкото аз мога да си спомня, заедно с Firebug. Не, това не е стандарт, а не на факта, че тя ще работи в IE6. Въпреки това, съвременни браузъри са въведени сеч как точно console.log. Това е така отбележи. И ако производството получава код console.log (.) - Бъдете нащрек, може да се счупи! Така че може би си струва да се замени на обекта в код конзола. така че просто огън.

Ако целевата браузър не console.log. и искате - опитайте Firebug Lite или Blackbird. да се насладите;)

CASE:
Ти просто prodebazhit някакъв код. Например, вижте какво се случва с натискането на един бутон или след AJAX-натоварването на данните.

Тук е трудно - необходимо е да се намери откъде да започне.

Малко на изкуството

// или просто
дебъгер;

* Този код е подчертана с изходен код за открояване. Разбира се, този метод не е съвършен. Това се случва, което прави гафове. Но това е един добър начин, обичам го много помага в работата.

Така че, след което поставете кода намери точката на прекъсване комплект. Ако не искате да (или не може) да променят изходния код - можете вместо това да сложи инструмента за отстраняване на грешки на brakepoint дебъгер ключова дума.

Така че:
  1. Търсим точното място по същия начин,
  2. Вместо дебъгер запис console.log (variable_to_watch)

Има интересни подобрения.


variable_to_watch - обект, който се е променило след изхода на конзолата. И подобно на това ще видите неговото състояние в момента на обаждането.

Тук е необходимо да не се използва console.log (variable_to_watch). и console.dir (variable_to_watch)


Необходимо е не само да се види variable_to_watch текущата стойност. но също така и да се експериментира с тях (например, искате да го наречем метод):
// нека иска достъп до обект OBJ
ако (debugEnabled)
console.log (window.temp_var = OBJ);

* Този код е подчертана с изходен код за открояване.
По този начин ние не само виждате изхода на конзолата, но и да получите достъп до обекта чрез глобалната линк към него: window.temp_var.

Open Firebug-> Конзола и се обадете на метод: temp_var.objMethod ().

Какво да се прави? Аз правя така:

Създайте файл с лепенка: ми-вътр-patch.js. и го свържете posleext-all.js
Вътре напиша нещо подобно: (() функция Var _backup = Ext.form.Form.render; // Ние си запазваме метода на предоставяне на форми - Вашата Cap ;.)

Ext.form.Form.render = функция (контейнер) // Тук е за отстраняване на грешки
console.log (контейнер);

// Вариантите са:
// console.dir (контейнер);
// console.log (window.t = контейнер);
// дебъгер;

// Изпълнение първоначалния метод
върнете _backup.apply (тия аргументи.);
>
>) ();

* Този код е подчертана с изходен код за открояване.
Извращение? Може би. Но аз обичам> :)

Надявам се, че моят опит ще помогне на някого.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!