Как дебъгвате php?
Някой би ли споделил как дебъгва PHP-то си стъпка по стъпка.
Аз като опитвам с Aptana 3 ми дава крайния резултат, а с netbeans изобщо не се получава.
Някой би ли споделил как дебъгва PHP-то си стъпка по стъпка.
Аз като опитвам с Aptana 3 ми дава крайния резултат, а с netbeans изобщо не се получава.
Не ползвам 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;
//логиката на скрипта
}
По този начин разбирам дали получавам правилната информация и т.н.
Всичко е писано в редактора и са възможни грешки.
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 въобще не стига респонса от дъмпа.
Във видеото ми от WordSesh за "Debugging WordPress" има много на брой и подробни примери за целта, както и реално демо с Xdebug и решаване на WordPress Core проблем. Бих му отделил 40мин, за различни варианти за дебъгване.