В некоторых случаях может возникнуть необходимость отладки приложений на php. Visual Studio code предоставляет такую возможность при условии установки дополнительного расширения PHP Debug (marketplace, github).



Установка PHP Debug


Для установки нажмите Ctrl+p и введите команду ext install php-debug. Нажмите на кнопку «включить», в итоге вы должны увидеть примерно следующее:


image

Установка и настройка Xdebug


PHP Debug использует для отладки Xdebug. Для настройки Xdebug пройдите по ссылке. Предполагается, что на локальной машине уже установлен и настроен сервер apache. Здесь и далее действия указаны для Windows. Можно создать файл, например, test.php содержащий:


    <?php
        phpinfo();

Открыть его в браузере и скопировать содержимое страницы в диалоговое окно. Другой способ:


  • win+R;
  • cmd + Enter;
  • php -i > phpinfo.text;
  • открыть любым удобным редактором phpinfo.txt и все его содержимое вставить в диалоговое окно.

Настройка Xdebug


Далее следуйте инструкциям по установке: скачайте .dll и не изменяя его имени скопируйте его в указанную папку, дополните файл php.ini указанной в руководстве строкой.


Кроме этого, добавьте нижеследующие строки. Итоговое добавление будет примерно таким:


    [XDebug]
zend_extension = C:\xampp\php\ext\php_xdebug-2.4.1-5.6-vc11.dll
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.2
xdebug.remote_port=9000
xdebug.remote_autostart=on
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
xdebug.remote_log ="C:\xampp\tmp\xdebug.log"

Как вы уже, возможно догадались, в данном примере на локальной машине установлен XAMPP.
Обратите внимание на строку xdebug.remote_host=127.0.0.2. По умолчанию Xdebug "слушает" порт 127.0.0.1. Укажите здесь, адрес отлаживаемого сайта.


Настройка Visual Studio code


Вызовите панель отладки (1) и нажмите на иконку с маленькой шестеренкой (2).


image

В появившемся списке выберите PHP. Автоматически сформируется файл launch.json.


    {
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

Настройка PHP Debug на этом окончена.


Отладка php в Visual Studio code


Откройте в браузере ваше приложение\сайт. Откройте папку с приложением в Visual Studio code. Установите в нужных файлах и строках точки остановки. Откройте панель отладки и выберите для запуска отладки команду Listen for Xdebug (1). Нажмите кнопку запуска (2).


image

Обновите страницу в браузере и наслаждайтесь.


Отладка php в Visual Studio code

Поделиться с друзьями
-->

Комментарии (9)


  1. fishca
    22.09.2016 16:45

    с++ отладчик также можно прикрутить?


    1. eustatos
      22.09.2016 20:54
      +1

      Последний раз на c++ писал в институте. Возможно, ответ здесь


      1. fishca
        22.09.2016 20:56

        Спасибо огромное! Жаль плюсануть не могу :(


  1. SerafimArts
    22.09.2016 19:40

    Последний раз, когда я смотрел уровень поддержки пыха в VS — там было в районе php 5.5 — 5.6 (примерно пол года-год назад).


    При этом:


    • Без автокомплита композера.
    • Без поддержки blade (и вроде бы twig) и других шаблонизаторов.
    • Без вменяемого статического анализа, только синтаксические ошибки.
    • Без автокомплита из phar.
    • Про пых версии 7.0 и 7.1 даже и мечтать не стоило.

    Скажите пожалуйста, есть вообще смысл рассматривать VS как инструмент для разработки на этом языке? Что-то изменилось за прошедшее время? (У меня Mint основная ОС, так что проверить самому руками довольно проблематично, извините).


    Т.к. если нет — разницы между VS и Sublime никакой (про продукты JetBrains можно вообще не говорить), кроме того, что VS раз в 10 медленнее.


    1. eustatos
      22.09.2016 20:58

      Работаю для frontend. Пока функционала достаточно. Но сейчас заинтересовался — покопаю в этом направлении.
      Какой редактор/IDE используете для php?


      1. SerafimArts
        23.09.2016 00:16

        Поглядел мельком работу в VS Code — нет ни поддержки ES7 (кусками), ни FlowType. В остальном — норм справился. Автокомплит почти что отсутствует.


        Пользуюсь PhpStorm. Для фронта достаточно будет WebStorm'а (он раза в два дешевле). Может я такой избалованный этой IDE, но уже не могу нормально работать в таких штуках как VS Code, ощущение что в обычном блокноте сижу. В полноценной VS ситуация получше ведь? Или так же?


    1. alaudo
      22.09.2016 21:45

      Изменилось многое, в частности появился абсолютно новый инструмент — Visual Studio Code.
      Это не Visual Studio, это совершенно другое приложение (кстати, кросс-платформенное, так что вполне можете попробовать).
      Конечно, фломастеры на вкус все разные, но мне субъективно нравится больше чем Sublime, да и лицензию тут покупать не надо…


      1. SerafimArts
        23.09.2016 00:10

        Проверил по-быстрому. Может плагины нужны какие? Потому что в поставке по-умолчанию — это полный провал.


        Заголовок спойлера




      1. SerafimArts
        23.09.2016 00:21

        P.S. С удовольствием посмотрел бы как с этим справляется полноценная VS. Достаточно кода с самого нижнего скрина.


        код

        Могу до текущей стабильной версии откатить синтаксис, т.к. 7.1 ещё не релизнулся и пока что только в RC.


        <?php
        use A; 
        
        namespace Some;
        
        class A
        {
            private const SOME = ['any' => 23]; 
        
            /**
             * @param int|null $value   
             * @return int
             */
            public static function new(?int $value): int
            {
                return new static($value ?? static::SOME['any']); 
            }
        
            public function __construct(int $value): Some
            {
                some::any();
            }
        
            ololo() { 
        
            }
        }