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

Когато вашият код се държи по неочакван начин, можете да отпечатате трупи или конзолата за диагностициране на проблема. За съжаление, понякога се случва, че този метод за проследяване на грешки не е ефективен при намирането на причината. Когато действително трябва да пътуване в изпълним код, за отстраняване на грешки - това е най-добрия си приятел.

Дебъгера също може да помогне, ако искате да учите в изходния код на релси, но не знаете откъде да започнете. Просто трасира всяко искане в молбата си и да използвате това ръководство, за да научите как е движението на вашия код, написан по-дълбоко в релси код.

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

Rails е построен в подкрепа за отстраняване на грешки, тъй като Rails 2.0. Вътре всяко приложение релси, можете да се обадите на дебъгер, като се обадите на метода на отстраняване на грешки.

Ако видите съобщение в конзолата или трупи:

Уверете се, че вашия уеб сървър е пуснат с --debugger на вариант:

В режим на развитие, може да предизвика динамично изисква \ 'дебъгер \' вместо рестартиране на сървъра, когато тя стартира без --debugger.

Веднага след като заявлението се вика метода дебъгер. дебъгер ще започне в среда дебъгер прозорец терминал, при което сървърът на приложения работи и ще бъде представен дебъгер линия (RDB: п). п е броят на нишки. Line също показва следния код, което е висящо.

Ако получите искане от браузъра раздела браузър, съдържаща искане ще виси до дебъгер е завършен, и следа приключи с обработката на цялата заявка.

Време е да се изследват и да се рови в молбата си. Като за начало би било добре да помолите за помощ при отстраняване на грешки ... така пише: (? Изведнъж вдясно) помощ

Следващата команда, която ще разгледаме един от най-полезните: списък. Можете да съкращаваме всякакви отстраняваме команди, като предоставя достатъчно писма, за да ги разграничат от другите отбори, така че можете да използвате л да се изброят команда.

Тази команда показва къде се намирате в кода чрез печатане на 10 линии от текущия ред в центъра; текущия ред в случай на шести и маркирани =>.

Ако повторите командата списък. сега само ние използваме л. Следващите 10 реда от файла се показват.

И така нататък до края на текущия файл. Когато в края на файла, да се посочат отборът ще започне отново от началото на файла и да продължи отново до края, лечение на файла като цикличен буфер.

От друга страна, за да видите последните десет линии трябва напиши list- или L-.

По този начин е възможно да се движат в рамките на даден файл, преглед на кода, преди и след линията, към която сте добавили дебъгер. И накрая, отново, за да видите къде се намирате в кода сега, можете да напишете списък =.

Когато започнете отстраняване на грешки кандидатурата си, ще бъдат поставени в различни контексти, като се преминава през различни части на стека.

дебъгер създава условия, при които се достига точката на прекъсване или събитие. В контекста е информация относно спирането на програмата, която позволява на дебъгер, за да видите купчина рамката, стойностите на променливи по отношение на програмата дебъгва, и тя съдържа информация за мястото, на което се спира програмата дебъгва.

По всяко време можете да се обадите на командата обратно проследяване (или неговия псевдоним къде), за да отпечатате заявлението за проследяване. Полезно е да знаете къде се намирате. Ако сте се чудили как ли нещо в кода си, а след това обратно проследяване ще даде отговор.

Можете да отидете, където искате в тази следа (тя ще се промени контекста) с помощта на екипа на рамка _n_. където п е определен брой рамка.

Налични променливи са същите, както ако сте стартирали код ред по ред. В края на краищата, това е това, което се отстранена.

Навигация в стека рамката: Можете да използвате командите на [н] (skoraschenno ф) и надолу [н], за да се промени контекста н рамки нагоре или надолу стека, съответно. п По подразбиране е един. Up в този случай отива в рамките на стека с голям брой, както и до по-ниските номера рамки.

Нишките (нишки)

Дебъгера да преглеждате, пауза, възобновяване и да превключвате между работещи теми, като използвате командата конец (съкращение-ти). Тази команда има няколко възможности:

  • резба показва текущата нишка
  • списък нишка се използва за показване на всички нишки и техните статути. знак плюс + и броя на указва текущата нишка на изпълнение.
  • стоп резба _n_ спре нишка п.
  • резба резюме _n_ отново резба п.
  • превключвател конец _n_ превключва контекста текущата нишка, за да п.

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

Всяко експресия може да бъде оценена в настоящия контекст. За да се направи оценка на изразяване, просто го напишете!

Този пример ще покажем как можете да отпечатате instance_variables, определени в настоящия контекст:

Както знаете, той показва всички променливи, които могат да бъдат достъпни от контролера. Този списък се актуализира динамично като изпълнението на кода. Например, изпълнете следната линия от следващата (считаме този отбор малко по-късно в този урок).

И след това попита отново instance_variables:

Можете също така да се оттегли в въздушните с въздушните възглавници (разбира се!) Режим Command. По този начин, въздушните сесия ще бъде пуснат в контекста, че го е причинило. Но внимавайте: това е експериментална функция.

метод Var е удобен начин да се покаже на променливите и техните стойности:

р команда (печат) и РР (доста печат) може да се използва за изчисляване на Ruby изрази и показване на стойностите на променливите в конзолата.

Променливите в показания списък ще бъдат отпечатани с техните стойности, след като е поставен в стека. За да спрете показването на променлива използване undisplay _n_. където п е броя на променливата (1 в последния пример).

Стъпка по стъпка

Сега, че знаете къде се намирате в движение следа, и възможност за отпечатване на наличните променливи. Да вървим напред и да разгледаме изпълнението на молбата.

Използвайте стъпка (съкращение и) при продължаване на старта на програмата си за следващата логична равновесната точка и да се върне контрола дебъгер.

Можете също да използвате стъпка + н и пред- приеме н да се движи напред или назад н стъпки съответно.

Можете да използвате и на следващия. който е подобен на по стъпка, но функцията призовава или метод се извършва в реда с код се изпълняват без прекъсване. Както и при стъпка, можете да използвате знака плюс да се движат н стъпки.

Разликата между следващия и стъпка е, че стъпка спира на следващия ред на изпълним код, който направи само една крачка, а следващите се измества на следващата линия без сключване на методите.

Да вземем например този блок от код, за да се включи фраза дебъгер:

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

С кода спря, нека да погледнем назад:

Ако искате да получите по-дълбоко в следата на комин, можете да преместите една стъпка стъпка. чрез които ви се обаждат и Rails код. Това е най-добрият начин да намерите грешки в кода си, а вероятно и в Ruby или Rails.

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

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

Можете да добавите точки на прекъсване динамично с командата почивка (или просто б). Има три възможни начина да добавите ръчно точки на прекъсване:

  • прекъсне линия. поставя точка на прекъсване на линия линия на изходния код в текущия файл.
  • пробие файл: ред [ако израз]. поставя точка на прекъсване на линия линия номер в файл. Ако дадено условие израз. то се изчислява и да е вярно. да започне отстраняване на грешки.
  • почивка клас (|. #) метод [ако експресията]. определя точка на прекъсване в метода за метод (. и # за клас и например метод съответно) са определени в класа на клас. изразяване работи по същия начин, както и с файл: линия.

Използвайте инфо точки на прекъсване _n_ или информация почивка _n_ за да се покаже списък с точки на прекъсване. Ако зададете номер, ще видите само точка на пречупване. В противен случай показва всички точки на прекъсване.

За да изтриете точки на прекъсване: използвайте командата изтриване _n_ за премахване на точка на прекъсване Броят п. Ако не е посочен номер, да изтриете всички точки на прекъсване, които са активни в момента ..

Можете също така да разрешите или забраните точки на прекъсване:

  • даде възможност на точки на прекъсване. позволява да се изброят точки на прекъсване или всички от тях, ако списъкът не е уточнено, спрете програма. Това е състоянието по подразбиране за новосъздадени точки на прекъсване.
  • забраните точки на прекъсване. Граничните стойности няма да повлияе на програмата.

изключения за улов

Command улов изключение име (или просто котка изключение-име) може да се използва за заснемане на вида на изключение изключение име. когато в противен случай тя ще се нарече манипулатор за него.

Възобновяване на изпълнение

Има два начина да рестартирате програмата, който е бил спрян от дебъгер:

редактиране

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

Лесния начин се опитва да спре всички нишки на резултата. Следователно, вашият сървър ще бъде спряна и ще трябва да я стартирате отново.

  • комплект за презареждане. prezagruzit изходния код, когато се промени.
  • комплект автоматичен списък. Списък команда да се изпълнява при всяко прекъсване.
  • настроен listsize _n_. Определете броя на реда код, за да покаже н по подразбиране.
  • настроен forcestep. За да сте сигурни, че следващата стъпка команда и винаги се премести в нов ред

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

Това е едно добро начало за .rdebugrc:

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