Loading...
K.a.l.o.y.a.n avatar K.a.l.o.y.a.n 1 Точки

Не ползвам IDE и този тип дебъгинг.

Дебъгвам с подобна функция:

function d($x) { return '<pre>', print_r($x, TRUE), '</pre>'; } // като print_r() може да се замени с var_dump()

Когато имам проблем в някой файл започвам от горе надолу. Където ми се струва че някоя променлива/функция не извежда правилен резултат слагам echo d($var_name); и ако е нужно добавям exit;

Понякога е достатъчно само echo 1; exit;, колкото да разбера че съм влязал в условието.

Пример:

if (preg_match('/Koko/', $name))

{

    echo 1; exit;

    //логиката на скрипта

}

else

{

    echo 2; exit;

    //логиката на скрипта

}

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

Друг пример:

if (preg_match('/Koko/', $name))

{

    //логиката на скрипта

    $data['name'] = $name;

    echo d($data); 

    $contact = get_contact($data);

    echo d($contact); exit;

    //логиката на скрипта

}

По този начин разбирам дали получавам правилната информация и т.н.

Всичко е писано в редактора и са възможни грешки.

 

1
RoYaL avatar RoYaL Trainer 6849 Точки

print_r с втори параметър true няма да работи върху класове и кложър-и. Аз лично предпочитам var_dump.

 

А за да дебъгваш през IDE-то (NetBeans), трябва в настройките на проекта /или глобалните на IDE-то/ да си настроил 1во как рънва проекта от IDE, дали като CLI прложение или като WEB, второ да си настроил URL-а за рънване, например ако в Apache htdocs-a/www-то си сложли папка Test и това ти е проекта, в IDE-то трябва да настроиш http://localhost/Test/. И после индекс файл, ако имаш различен стартов файл от index.php.

 

На скоро като рънвах портабъл нетбийнс 8 някъде се срещнах и с диалогов за това къде ми е уеб сървъра и въобще какъв уеб сървър ползвам.

 

Случая с var_dump() и exit; обаче не винаги е най-правилния, въпреки че от години го ползвам, има моменти в които просто си трябва дебъг през IDE-то, за да не променяш изцяло логиката на приложението само заради един дебъг.

 

Например, имаш ajax_login.php файлче, което приема пост параметри, контактва някаква бекенд система и връща json. Настроен му е и хедър контет тайп json. През javascript файл, пращах ajax call с нужните пост параметри. И принтиш примерно в конзолата json response-а. Поради факта обаче, че хедъра е с content type json, нищо различно от json няма да се изпринти в ajax_login, и ако някъде назад в бекенда нещо се троши, няма да видиш какво е. Всъщност, дори и да махнеш хедъра, и получиш примерно thrown exception от някой метод, ако после влезеш в тоя метод и набиеш dump/die на нещо, няма да го изпринти, поради факта че примерно това е бил boolean method и напред в chain-а просто проверяват стойността му и до последния метод, който връща json въобще не стига респонса от дъмпа.

2
mpeshev avatar mpeshev Trainer 98 Точки

Във видеото ми от WordSesh за "Debugging WordPress" има много на брой и подробни примери за целта, както и реално демо с Xdebug и решаване на WordPress Core проблем. Бих му отделил 40мин, за различни варианти за дебъгване.

 

https://www.youtube.com/watch?v=QH6QUZ6Uu-4

9
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.