<
  • Главная
Статьи

Знайдіть помилки в PHP-додатках за допомогою Xdebug

  1. Як в серіалі CSI, але стосовно до комп'ютерів
  2. Лістинг 1. Процедури для оснащення функції callee () новими можливостями
  3. Компонування і установка Xdebug
  4. Малюнок 1. Перевірка коректності установки і роботи розширення Xdebug
  5. конфігурація Xdebug
  6. обмежена рекурсія
  7. Лістинг 2. Обмеження рекурсії
  8. Малюнок 2. Xdebug завершує виконання, якщо стек викликів перевищує його граничне значення
  9. Відповіді на чотири простих запитання
  10. Лістинг 3. Помилки
  11. Об'єднання всіх налаштувань
  12. Лістинг 4. Налаштування для файлу php.ini
  13. Інтерпретація даних дампа
  14. Лістинг 5. Змінений помилковий код
  15. Малюнок 3. Дамп суперглобальних, локальних змінних і змінних при помилку
  16. Лістинг 6. Клас і екземпляри PHP V4
  17. Лістинг 7. Висновок var_dump ()
  18. трасування коду
  19. Лістинг 8. Налаштування трасування
  20. Лістинг 9. Повна трасування
  21. Лістинг 10. Трасування PHP-генератора чисел Фібоначчі
  22. Малюнок 4. Синтаксичний файл vim для файлів трасування Xdebug полегшує аналіз
  23. Ресурси для скачування

Краще використовувати PHP-відладчик, ніж echo з var_dump (), debug_zval_dump () і print_r ()

Хоча PHP можна використовувати для створення сценаріїв командного рядка для таких завдань як системне адміністрування і традиційна обробка даних, міць мови особливо проявляється в Web-додатках. У даній статті кожне PHP-додаток розміщується на сервері і активізується через проксі, такий як Apache, для обробки вхідних запитів. Для кожного запиту за короткий час виконується звичайне PHP Web-додаток, що видає Web-сторінку або структуру XML-даних.

З огляду на короткочасність виконання Web-додатків і їх рівневу конструкцію (клієнтську програму, мережу, HTP-сервер, прикладної код і застосовується база даних), відловити баги (bugs) в PHP-коді може бути непросто. Навіть якщо припустити, що всі рівні, за винятком PHP-коду, працюють бездоганно, трасування до виявлення помилки в PHP-коді може бути важким, особливо (з деякою іронією) якщо додаток використовує все більше і більше класів.

PHP-вираз echo і функції var_dump (), debug_zval_dump () і print_r () є звичайними і дуже популярними засобами налагодження, що допомагають вирішити різні проблеми. Однак як засобу розслідування ці вирази (і навіть більше надійний інструментарій, наприклад, пакет PEAR Log ) Надають докази, які ви повинні аналізувати апріорі і поза контекстом.

Крім того, налагодження за допомогою дедукції є підходом з позиції "грубої сили". Ви збираєте дані і просіваєте їх, намагаючись зрозуміти, що сталося. При відсутності необхідної інформації ви повинні переробити ваш код, повторити попередні дії і почати дослідження заново. Набагато більш ефективна стратегія - відчувати додаток під час його роботи. Можна каталогізувати параметри запиту, переглянути стек викликів процедур, дізнатися значення будь-якої змінної або об'єкта. Можна тимчасово перервати виконання програми та отримати повідомлення про зміни значення змінної. У деяких випадках можна фактично інтерактивно змінювати змінні, задаючи питання "Що якщо?".

Таке "живе" або інтерактивне дослідження забезпечується спеціальним додатком, званим отладчиком. Отладчик запускає або підключається до процесу для управління ним і дослідження його пам'яті. Або, у випадку з інтерпретуються мовами, відладчик може безпосередньо інтерпретувати код. Типовий сучасний відладчик може індексувати і переглядати вихідний код, відображати складні структури даних в читабельному формі та електронній відображати стан програми, стек викликів, виведені програмою дані і значення всіх змінних. Наприклад, для відладчика звичайним є каталогізація і відображення властивостей і методів класу.

У цій та наступній статтях я познайомлю вас з інструментальними засобами, які неодмінно спростять PHP-налагодження. Наступного разу я сконцентруюся на інтерактивній налагодженні і програмою Zend Debugger (надійному отладчике, спеціально розробленому для PHP), а також розгляну безліч функцій, які він пропонує (Zend Debugger - це комерційний продукт, що надається як частина Zend PHP Integrated Development Environment (IDE) ). Також я розгляну PHP-відладчик з відкритим вихідним кодом, якщо ви віддаєте перевагу витрачати гроші на пиво, а не на програми. У даній статті я сконцентруюся на зборі якісніших доказів.

Як в серіалі CSI, але стосовно до комп'ютерів

Коли код стає неправильним, не даючи очікуваного результату або не працюючи зовсім, ви хотіли б отримати відповідь на чотири питання: де, що, чому і коли.

  • "Де" - номер рядка (і в якому вона файлі), після якої виконання програми припинилося.
  • "Що" привело код в непридатність - підозрюваний, так би мовити.
  • "Чому" - в чому природа помилки. Можливо, це логічна помилка, помилка, викликана взаємодією з операційною системою, або те й інше.
  • "Коли" - контекст, в якому виникла помилка. Що трапилося безпосередньо перед загибеллю програми? Як і в будь-якому злочині, докази можуть викрити злочинця, якщо зібрати достатню їх кількість.

Засіб для проведення розслідування Xdebug (використовувалося в попередній статті для профілювання продуктивності PHP-додатки), як випливає з його назви, надає кілька функціональних можливостей для відображення стану програми і є цінним дослідницьким інструментом, який повинен бути у вашому наборі (див. Розділ " ресурси "). Будучи встановленим, Xdebug втручається в процес для запобігання нескінченних рекурсій, додає в повідомлення про помилки інформацію про трасування стека і функцій, стежить за розподілом пам'яті, а також виконує деякі інші функції. Xdebug містить також набір функцій, які ви можете додати в свій код для отримання діагностичних даних часу виконання.

Наприклад, наведений нижче код використовує жменьку процедур xdebug _... () для оснащення функції callee () можливістю виведення точного місця розташування викликає функції, включаючи ім'я файлу, номер рядка та ім'я функції.

Лістинг 1. Процедури для оснащення функції callee () новими можливостями

<? Php function callee ($ a) {echo sprintf ( "callee () called @% s:% s from% s", xdebug_call_file (), xdebug_call_line (), xdebug_call_function ()); } $ Result = callee ( "arg"); ?>

Цей код виводить:

callee () called @ /var/www/catalog/xd.php: 10 from {main}

Компонування і установка Xdebug

Xdebug без праці компонується з вихідних кодів в UNIX®-подібних операційних системах, в тому числі Mac OS X. Якщо ви використовуєте PHP в Microsoft® Windows®, можете завантажити модуль Xdebug в бінарному вигляді для останніх версій PHP з Web-сайту Xdebug (див . розділ " ресурси ").

Давайте виконаємо компоновку і встановимо Xdebug для Debian "Sarge" Linux® і PHP V4.3.10-19. На момент написання даної статті новітньою версією Xdebug є V2.0.0RC4, випущена 17 травня 2007 року. Для роботи ви повинні мати службові програми phpize і php-config, а також можливість змінювати системний конфігураційний файл php.ini (якщо цих програм у вас немає, зверніться на PHP.net за вихідними кодами і інструкціями щодо компонування PHP з нуля). Виконайте наступні дії:

  1. Завантажте Xdebug tarball (стиснений gzip .tar-архів). Це дуже зробити просто за допомогою команди wget: $ wget http://www.xdebug.org/files/xdebug-2.0.0RC4.tgz
  2. Разархівіруйте tarball і перейдіть в каталог з вихідним кодом: $ tar xzf xdebug-2.0.0RC4.tgz $ cd xdebug-2.0.0RC4
  3. Запустіть phpize, щоб підготувати код Xdebug для вашої версії PHP: $ phpize Configuring for: PHP Api Version: 20020918 Zend Module Api No: 20020429 Zend Extension Api No: 20021010
    Результатом роботи phpize є сценарій (дуже до місця названий configure), який використовується для настройки іншого процесу компоновки.
  4. Виконайте сценарій настройки: $ ./configure checking build system type ... i686-pc-linux-gnu checking host system type ... i686-pc-linux-gnu checking for gcc ... gcc checking for C compiler default output file name ... a.out checking whether the C compiler works ... yes checking whether we are cross compiling ... no checking for suffix of executables ... checking for suffix of object files ... o ... checking whether stripping libraries is possible ... yes appending configuration tag "F77" to libtool configure: creating ./config.status config.status: creating config.h
  5. Виконайте компоновку розширення Xdebug, запустивши make: $ make / bin / sh /home/strike/tmp/xdebug-2.0.0RC4/libtool --mode = compile gcc -I. -I / home / strike / tmp / xdebug-2.0.0RC4 -DPHP_ATOM_INC -I / home / strike / tmp / xdebug-2.0.0RC4 / include -I / home / strike / tmp / xdebug-2.0.0RC4 / main -I /home/strike/tmp/xdebug-2.0.0RC4 -I / usr / include / php4 -I / usr / include / php4 / main -I / usr / include / php4 / Zend -I / usr / include / php4 / TSRM -DHAVE_CONFIG_H -g -O0 -c /home/strike/tmp/xdebug-2.0.0RC4/xdebug.c -o xdebug.lo mkdir .libs ... Build complete. (It is safe to ignore warnings about tempnam and tmpnam).
    Результатом роботи make є розширення Xdebug, xdebug.so.
  6. Встановіть розширення: $ sudo make install Installing shared extensions: / usr / lib / php4 / 20020429 /
    Перед продовженням роботи виділіть і скопіюйте каталог, який відобразила остання команда. Цей шлях дуже важливий для конфігурації розширення на останньому кроці.
  7. Відкрийте файл php.ini в улюбленому текстовому редакторі і додайте наступні рядки: zend_extension = /usr/lib/php4/20020429/xdebug.so xdebug.profiler_enable = Off xdebug.default_enable = On
    Перший рядок завантажує розширення Xdebug; друга забороняє функціональність профайлера в Xdebug (для спрощення), а третя дозволяє функціональні можливості налагодження.

Для перевірки коректності установки і дозволу роботи розширенню Xdebug перезапустіть ваш Web-сервер, потім створіть просте однорядкове PHP-додаток з кодом <? Php phpinfo (); ?>. Якщо ви вкажете адресу файлу в браузері (наприклад, http: //localhost/phpinfo.php) і перейдіть виведену інформацію вниз, то побачите щось схоже на малюнок 1.

Малюнок 1. Перевірка коректності установки і роботи розширення Xdebug
Краще використовувати PHP-відладчик, ніж echo з var_dump (), debug_zval_dump () і print_r ()   Хоча PHP можна використовувати для створення сценаріїв командного рядка для таких завдань як системне адміністрування і традиційна обробка даних, міць мови особливо проявляється в Web-додатках

Примітка: Якщо розділу Xdebug немає в phpinfo (), Xdebug не завантажили. log-файли помилок вашого сервера Apache можуть вказати причину. До звичайних помилок відноситься неправильний шлях для zend_extension або конфлікт з іншим розширенням. Наприклад, якщо ви хочете використовувати XCache і Xdebug, першим завантажуйте XCache. Однак, оскільки Xdebug призначений для використання під час розробки і припускаючи, що шлях до xdebug.so вказано правильно, забороніть інші розширення і спробуйте ще раз. Потім можна повторно дозволити розширення для виконання інших перевірок, наприклад, ефективності кешування. На сайті Xdebug наведені також деякі інші поради щодо вирішення можливих проблем.

конфігурація Xdebug

Директиви (в самому лівому стовпці великий таблиці на малюнку 1 ) - це тільки деякі з параметрів, які можна встановити для зміни поведінки розширення Xdebug. Всі директиви вказуються у файлі php.ini. Деякі з них конфігурують засоби налагодження, інші налаштовують роботу профайлера. Ігноруючи останні, давайте налаштуємо Xdebug так, щоб він допомагав налагоджувати PHP-код.

обмежена рекурсія

При використанні рекурсії (наприклад, для обчислення чисел Фібоначчі) і некоректному вказівці умов завершення додаток може виконуватися дуже довго до тих пір, поки не використовує будь-який вибраний час або пам'ять. Для обмеження глибини рекурсії можна налаштувати параметр xdebug.max_nesting_level. Наприклад, xdebug.max_nesting_level = 50 обмежує рекурсию глибиною в 50 вкладених викликів до примусового завершення програми. Для демонстрації виконайте наступний код з дозволом роботи Xdebug.

Лістинг 2. Обмеження рекурсії

<? Php function deep_end () {deep_end (); } Deep_end (); ?>

Функція deep_end () абсолютно буквально веде в глибокий тупик. Xdebug втручається в процес після 49 викликів функції і видає інформацію, наведену на малюнку 2 (до речі кажучи, початкова активізація main () для запуску програми вважається першим фреймом).

Малюнок 2. Xdebug завершує виконання, якщо стек викликів перевищує його граничне значення

Якщо додаток використовує рекурсію інтенсивно для вирішення великих проблем методом "розділяй і володарюй", відповідно встановіть значення цього параметра "глибше". В іншому випадку встановіть xdebug.max_nesting_level в номінальне значення для більш швидкого припинення вийшли з під контролю послідовностей викликів функцій.

Відповіді на чотири простих запитання

При виникненні помилок потрібно відповісти на чотири питання. Xdebug може надати всю потрібну інформацію, причому негайно. Ось для початку кілька корисних налаштувань; їх можна налаштувати більш точно в будь-який час.

Лістинг 3. Помилки

xdebug.dump_once = On xdebug.dump_globals = On xdebug.dump_undefined = On xdebug.dump.SERVER = REQUEST_METHOD, REQUEST_URI, HTTP_USER_AGENT xdebug.dump.REQUEST = * xdebug.show_exception_trace = On xdebug.show_local_vars = 1 xdebug.var_display_max_depth = 6

Налаштування xdebug.dump_once, xdebug.dump_globals, xdebug.dump_undefined і xdebug.dump_SUPERGLOBAL (де SUPERGLOBAL може бути COOKIE, FILES, GET, POST, REQUEST, SERVER або SESSION) керують тим, які суперглобальні змінні PHP включаються в усі діагностичні результати.

Встановіть xdebug.dump_globals в значення On для виведення суперглобальних змінних, перерахованих в налаштуваннях xdebug.dump_SUPERGLOBAL. Наприклад, xdebug.dump_SERVER = REQUEST_METHOD, REQUEST_URI, HTTP_USER_AGENT виводить суперглобальні змінні PHP $ _SERVER [ 'REQUEST_METHOD'], $ _SERVER [ 'REQUEST_URI'] і $ _SERVER [ 'HTTP_USER_AGENT']. Якщо ви хочете вивести всі значення масиву superglobal, використовуйте символ зірочки (*), наприклад, xdebug.dump_REQUEST = *. Якщо ви встановите xdebug.dump_undefined в значення On і не встановите іменовану змінну superglobal, вона все одно виводиться зі значенням undefined.

Рядок xdebug.show_exception_trace = On дозволяє трасування виняткових ситуацій, навіть якщо ви перехопили виняткову ситуацію. Рядок xdebug.show_local_vars = 1 виводить всі локальні змінні самої зовнішньої області видимості кожного виклику функції, включаючи ще не початкові змінні. А xdebug.var_display_max_depth = 6 вказує глибину висновку комплексної змінної.

Об'єднання всіх налаштувань

У лістингу 4 показані всі важливі настройки для Xdebug в файлі php.ini.

Лістинг 4. Налаштування для файлу php.ini

zend_extension = /usr/lib/php4/20020429/xdebug.so xdebug.default_enable = On xdebug.show_exception_trace = On xdebug.show_local_vars = 1 xdebug.max_nesting_level = 50 xdebug.var_display_max_depth = 6 xdebug.dump_once = On xdebug.dump_globals = On xdebug .dump_undefined = On xdebug.dump.REQUEST = * xdebug.dump.SERVER = REQUEST_METHOD, REQUEST_URI, HTTP_USER_AGENT

Збережіть ці настройки в файлі php.ini, а потім перезапустіть ваш Web-сервер.

Інтерпретація даних дампа

У наступному прикладі продемонстровано, що відбувається при виникненні помилки. Змініть код "off-the-deep-end" для відповідності лістингу 5.

Лістинг 5. Змінений помилковий код

<? Php function deep_end ($ count) {// додати 1 до кадру count $ count + = 1; if ($ count <48) {deep_end ($ count); } Else {trigger_error ( "going off the deep end!"); }} // Викликається main (), щоб почати виконання програми, // тобто стек викликів починається з одного фрейма deep_end (1); ?>

При виконанні цього нового коду, ви повинні побачити значно більше інформації, як показано нижче.

Малюнок 3. Дамп суперглобальних, локальних змінних і змінних при помилку

Текст переданого в trigger_error повідомлення показаний вгорі. Внизу розташований список запитаних елементів $ _SERVER і список певних елементів $ _REQUEST. У самому внизу знаходиться список змінних області видимості # 48, що є викликом deep_end (), згідно маніфесту. У цьому виклику змінна $ count мала значення integer 48. З такою конфігурацією Xdebug ви тепер маєте більше доказів для пошуку злочинця.

Ось ще одна порада: Xdebug надає розширену функцію var_dump (), яка особливо корисна для масивів і класів PHP. Наприклад, в лістингу 6 наведено простий (PHP V4) клас і екземпляри.

Лістинг 6. Клас і екземпляри PHP V4

<? Php class Person {var $ name; var $ surname; var $ age; var $ children = array (); function Person ($ name, $ surname, $ age, $ children = null) {$ this-> name = $ name; $ This-> surname = $ surname; $ This-> age = $ age; foreach ($ children as $ child) {$ this-> children [] = $ child; }}} $ Boy = new Person ( 'Joe', 'Smith', 4); $ Girl = new Person ( 'Jane', 'Smith', 6); $ Mom = new Person ( 'Mary', 'Smith', 34, array ($ boy, $ girl)); var_dump ($ boy, $ mom); ?>

А в лістингу 7 показана інформація, що виводиться функцією var_dump ().

Лістинг 7. Висновок var_dump ()

object (person) var 'name' => string 'Joe' (length = 3) var 'surname' => string 'Smith' (length = 5) var 'age' => int 4 var 'children' => array empty object (person) var 'name' => string 'Mary' (length = 4) var 'surname' => string 'Smith' (length = 5) var 'age' => int 34 var 'children' => array 0 => object (person) var 'name' => string 'Joe' (length = 3) var 'surname' => string 'Smith' (length = 5) var 'age' => int 4 var 'children' => array empty 1 => object (person) var 'name' => string 'Jane' (length = 4) var 'surname' => string 'Smith' (length = 5) var 'age' => int 6 var 'children '=> array empty

При використанні Xdebug з класами PHP V5 в дамп входять такі атрибути як public, private і protected.

трасування коду

Виправлення помилки в коді (також як і розкриття вбивства) часто вимагає відтворення докладної тимчасової шкали. Наприклад, витік пам'яті зазвичай не проявляє себе як помилкова ситуація. Навпаки, операції виконуються нормально до тих пір, поки не закінчиться пам'ять і додаток раптово не завершиться. Якщо витік пам'яті відбувається через конкретних запитів, помилки можуть виявлятися не завжди, і їх буде складно прогнозувати. Показує загальну частину пам'яті в часі показало б серйозність витоку. Детальна тимчасова шкала (наприклад, від функції до функції) могла б вказати на джерело витоку.

Xdebug може забезпечити виведення докладної тимчасової шкали як трасування виконання. При дозволеної трассировке Xdebug реєструє кожен виклик функцій, включаючи аргументи функції і значення, що повертається. Можна відформатувати кожен log-файл для більш зручного його сприйняття людиною або машиною. Перший варіант ви можете переглядати самі, а для другого можна написати окремий додаток для аналізу.

Так само як і для дампов, Xdebug має кілька параметрів для налаштування трасування в php.ini. Наступні настройки, наприклад, забезпечують виведення найбільш докладної інформації:

Лістинг 8. Налаштування трасування

xdebug.trace_format = 0 xdebug.auto_trace = On xdebug.trace_output_dir = / tmp / traces xdebug.trace_output_name = trace.% c.% p xdebug.collect_params = 4 xdebug.collect_includes = On xdebug.collect_return = On xdebug.show_mem_delta = On

Налаштування xdebug.auto_trace = 1 автоматично дозволяє трасування до виконання будь-якого PHP-сценарію. В якості альтернативи можна встановити xdebug.auto_trace = 0 і використовувати функції xdebug_start_trace () і xdebug_stop_trace () з вашого коду для вирішення і заборони трасування відповідно. Однак якщо xdebug.auto_trace встановлений в значення 1, можна почати трасування до включення сконфигурированного auto_prepend_file.

Параметри xdebug.trace_ouput_dir і xdebug.trace_output_name керують тим, де зберігається інформація трасування. В даному прикладі всі файли зберігаються в / tmp / traces, і кожен файл починається з trace, за яким слідує ім'я PHP-сценарію (% s) і ідентифікатор процесу (% p). Назви всіх файлів трасування Xdebug закінчуються суфіксом .xt.

За замовчуванню Xdebug відображає поля годині, использование пам'яті, імені Функції и Глибина виклику Функції. Если Встановити xdebug.trace_format в значення 0, інформація виводу у виде, зручне для читання ЛЮДИНОЮ (для машинного формату вікорістовується значення 1). Крім того, можна виявити зростання або зменшення використання пам'яті при вказівці xdebug.show_mem_delta = 1, а тип і значення вхідних параметрів можна виводити, вказавши xdebug.collect_params = 4. Для відстеження значення, що повертається кожною функцією, встановіть xdebug.collect_return = 1.

Прийшов час інший приклад. Створіть каталог / tmp / traces, змініть його атрибути на world-readable і world-writable за допомогою mkdir / tmp / traces; chmod a + rwx / tmp / traces (якщо ви сумніваєтеся в тому, чи потрібно робити цей каталог доступним для всіх, по крайней мере, Ви можете це зробити доступним для користувача Web-сервера - зазвичай www або nobody). Додайте в файл php.ini зазначені вище налаштування, запустіть Web-сервер і знову вкажіть в адресному рядку браузера додаток phpinfo (). Інформація трасування повинна виглядати приблизно так, як показано в лістингу 9.

Лістинг 9. Повна трасування

TRACE START [2007-06-06 14:04:55] 0.0003 9440 +9440 -> {main} () /var/www/catalog/t/info.php:0 0.0005 9440 +0 -> phpinfo () / var /www/catalog/t/info.php:1> = -> TRUE> = -> 1 0.2351 9208 TRACE END [2007-06-06 14:04:55]

Тут main () викликає phpinfo (), яка повертає TRUE. Коли завершується main (), вона повертає 1. Потім, вкажіть в адресному рядку PHP-додаток "deep end" або якесь інше для генерування більш реальною трасування.

У лістингу 10 показана трасування PHP-генератора чисел Фібоначчі з попередньої статті, що обчислює чотири числа Фібоначчі:

Лістинг 10. Трасування PHP-генератора чисел Фібоначчі

TRACE START [2007-06-06 14:17:17] 0.0004 16432 +16432 -> {main} () /var/www/catalog/t/fibonacci.php:0 0.0006 16696 +264 -> fib ( '4' ) /var/www/catalog/t/fibonacci.php:35 0.0007 16696 +0 -> fib (3) /var/www/catalog/t/fibonacci.php:7 0.0007 16736 +40 -> fib (2) / var / www / catalog / t / fibonacci.php: 7 0.0007 16848 +112 -> fib (1) /var/www/catalog/t/fibonacci.php:7> => 1 0.0008 16904 +56 -> fib (0 ) /var/www/catalog/t/fibonacci.php:7> => 0> => 1 0.0009 16904 +0 -> fib (1) /var/www/catalog/t/fibonacci.php:7> => 1> => 2 0.0009 16904 +0 -> fib (2) /var/www/catalog/t/fibonacci.php:7 0.0009 16904 +0 -> fib (1) / var / www / catalog / t / fibonacci. php: 7> => 1 0.0010 16904 +0 -> fib (0) /var/www/catalog/t/fibonacci.php:7> => 0> => 1> => 3> => 1 0.0011 12528 TRACE END [2007-06-06 14:17:17]

У першому стовпчику показано час, у другому - сумарне використання пам'яті, в третьому - інкрементне використання пам'яті, в четвертому - виклики функцій, включаючи параметри.

Рядки, відмічені символами> =>, показують значення, що повертається з кожної функції (для зіставлення виклику функції з повертається нею значенням потрібно знайти -> з відповідним відступом). Знову ж, останнє значення> => 1 є значенням, що повертається функцією main ().

Для vim його автор Xdebug Дерік Ретанс (Derick Rethans) надає набір правил колірного виділення синтаксису для файлів трасування Xdebug. Ці правила містяться в файлі xt.vim в пакеті вихідних кодів Xdebug. У сучасних дистрибутивах Linux просто скопіюйте xt.vim в $ VIMRUNTIME / syntax / xt.vim, а потім запустіть vim tracefile .xt. На малюнку 4 показана трасування генератора чисел Фібоначчі з колірним виділенням в vim.

Малюнок 4. Синтаксичний файл vim для файлів трасування Xdebug полегшує аналіз

Докучливі PHP-паразити в небезпеці

Виправлення помилок в PHP-коді може бути не простим завданням. Але якщо у вас є система розробки, і ви можете встановити Xdebug, знищити ці баги стає набагато простіше. Xdebug може показати трасування стека, вивести дамп навіть комплексних змінних, простежити використання пам'яті в часі і виконати ефективне посмертний розтин при виникненні помилки або аварії (НЕ якщо, а коли).

Ресурси для скачування

Схожі тими

  • Оригінал статті " Squash bugs in PHP applications with Xdebug "(EN).
  • відвідайте Xdebug.org (EN).
  • Документація по Xdebug (EN).
  • Додаткова інформація по використанню Xdebug приведена в статті developerWorks " Як зробити PHP-додатки швидкими, ще більш швидкими, найшвидшими, частина 2: Профілізація PHP-додатки для пошуку, діагностування та прискорення повільного коду "(EN).
  • завантажте розширення Xdebug .
  • PHP.net - центральний ресурс для PHP-розробників (EN).
  • " Рекомендований список для читання з мови PHP "(EN).
  • Вдосконалить свої навички в PHP-програмуванні, використовуючи ресурси IBM developerWorks PHP project (EN).
  • Мовні програми developerWorks - цікаві інтерв'ю та дискусії для розробників програмного забезпечення (EN).
  • Чи використовуєте бази даних в PHP? Зверніть увагу на Zend Core for IBM , Цільну, готову до використання, легку в установці інтегроване середовище розробки на PHP, що підтримує IBM DB2 V9 (EN).
  • Розділ developerWorks Open source з вичерпною інформацією how-to, інструментальними засобами і оновленнями проектів, що допомагає використовувати в розробці технології з відкритим вихідним кодом і продукти IBM.
  • Розробіть ваш наступний проект з відкритим вихідним кодом, використовуючи пробне програмне забезпечення IBM , Доступне для завантаження або на DVD. (EN)
  • завантажте оціночні версії продуктів IBM і використовуйте інструментальні засоби розробки додатків і програми проміжного рівня DB2®, Lotus®, Rational®, Tivoli® і WebSphere®.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

У деяких випадках можна фактично інтерактивно змінювати змінні, задаючи питання "Що якщо?
Що трапилося безпосередньо перед загибеллю програми?
Php function callee ($ a) {echo sprintf ( "callee () called @% s:% s from% s", xdebug_call_file (), xdebug_call_line (), xdebug_call_function ()); } $ Result = callee ( "arg"); ?
Для перевірки коректності установки і дозволу роботи розширенню Xdebug перезапустіть ваш Web-сервер, потім створіть просте однорядкове PHP-додаток з кодом <?
Php phpinfo (); ?
Php function deep_end () {deep_end (); } Deep_end (); ?
Чи використовуєте бази даних в PHP?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью