Тя ще изглежда - но това, което е там, за да кажеш? И все пак, това е очевидно. Но въпросът, че аз попитах с изненадваща честота. Да, и аз имам какво да кажа.
Дайте конкретни примери и да ви кажа как съм ги решен.
Ние виждаме целта, а не да се види на препятствия
Ето основните браузъри и отстраняване на грешки инструменти:
- 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 дебъгер ключова дума.
Така че:- Търсим точното място по същия начин,
- Вместо дебъгер запис 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 = функция (контейнер) / Wrap'им метод
// Тук е за отстраняване на грешки
console.log (контейнер);
// Вариантите са:
// console.dir (контейнер);
// console.log (window.t = контейнер);
// дебъгер;
// Изпълнение първоначалния метод
върнете _backup.apply (тия аргументи.);
>
>) ();
* Този код е подчертана с изходен код за открояване.
Извращение? Може би. Но аз обичам> :)
Надявам се, че моят опит ще помогне на някого.
Свързани статии