PHP отладчик XDebug
Подключение и настройка
nano ./xdebug.ini
zend_extension=xdebug.so [debug] xdebug.auto_trace=0 xdebug.collect_includes=1 xdebug.collect_params=1 xdebug.collect_return=0 ;xdebug.default_enable=1 xdebug.extended_info=1 xdebug.show_local_vars=1 xdebug.show_mem_delta=1 xdebug.max_nesting_level=100 ; trace xdebug.trace_format=0 xdebug.trace_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-trace" xdebug.trace_options=0 xdebug.trace_output_name=timestamp ; debugger settings xdebug.remote_autostart=0; 1 - Не требует XDEBUG_SESSION = xdebug в параметрах или куках, 0 - требует xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_host=127.0.0.1; - отладка на локальной машине xdebug.remote_host=192.168.1.6; - отладка на удаленной машине xdebug.remote_mode=req ;xdebug.remote_mode = JIT xdebug.remote_port=9000 xdebug.remote_log="/var/log/php5-fpm/php-fpm-xdebug-remote" xdebug.idekey=xdebug ; profiler settings xdebug.profiler_append=0 xdebug.profiler_enable=0 xdebug.profiler_enable_trigger=1 xdebug.profiler_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-profiler" xdebug.profiler_output_name=profile.out ; Request ;xdebug.dump.GET=* ;xdebug.dump.REQUEST =* ;xdebug.dump.SERVER=HTTP_HOST, SERVER_NAME
Web XDebug
XDEBUG_SESSION_START=xdebug XDEBUG_SESSION=xdebug
Console XDebug
$ exportPHP_IDE_CONFIG="serverName=www.host-name.ztc"&&exportXDEBUG_CONFIG="remote_host=192.168.1.6 idekey=xdebug"&& php7.0 ./yii
Где:
- PHP_IDE_CONFIG - Наименование сервера из "Settings / Preferences | Languages & Frameworks | PHP | Servers"
- Так-же желательно установить маппирование путей (локальных и на удаленном сервере)
- XDEBUG_CONFIG
- remote_host - IP Хоста, производящего отладку
- idekey - Ключ, устанавливаемый в списке серверов "Settings / Preferences | Languages & Frameworks | PHP | Servers", "Ide key(session id)"
Хелпер для более одного отладчика
Если на сервере стоит более одного отладчика и в консоли по умолчанию, те в php.ini найденой по php -i, стоит другой отладчик в параметре zend_extension.
nano ~./.bashsrc
function phpx(){ export PHP_INI_SCAN_DIR=/etc/php5/cli-xdebug/conf.d && php -c /etc/php5/cli-xdebug/php.ini -q "$@"; }
и далее вызываем наш скрипт
phpx sample.php
Мульти соеденения
- apt-get install php5-xdebug
- cd /opt
- mkdir pydbgpproxy
- cd pydbgpproxy
- wget https://github.com/Mirocow/pydbgpproxy/archive/master.zip ./ - Установить прокси (Python Remote Debugging Client)
- unzip master.zip ./
- echo "export PYTHONPATH=\${PYTHONPATH}:/opt/bin/pydbgpproxy/pythonlib" » ~/.bashrc
- ln -s $(pwd)/pydbgpproxy /usr/local/bin/pydbgpproxy
- запустить /usr/loca/bin/pydbgpproxy -i 0.0.0.0:9001 -d 9000
- Установить уникальный ключ для хоста.
- Зарегистрировать на сервере
nano ./xdebug.ini
; configuration for php xdebug module ; priority=20 zend_extension=xdebug.so [debug] xdebug.auto_trace=0 xdebug.collect_includes=1 xdebug.collect_params=1 xdebug.collect_return=0 ;xdebug.default_enable=1 xdebug.extended_info=1 xdebug.show_local_vars=1 xdebug.show_mem_delta=1 xdebug.max_nesting_level=100 ; trace xdebug.trace_format=0 xdebug.trace_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-trace" xdebug.trace_options=0 xdebug.trace_output_name=timestamp ; debugger settings xdebug.remote_autostart=0; 1 - Не требует XDEBUG_SESSION = xdebug в параметрах или куках, 0 - требует xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req ;xdebug.remote_mode = JIT xdebug.remote_port=9000 xdebug.remote_log="/var/log/php5-fpm/php-fpm-xdebug-remote" ; profiler settings xdebug.profiler_append=0 xdebug.profiler_enable=0 xdebug.profiler_enable_trigger=1 xdebug.profiler_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-profiler" xdebug.profiler_output_name=profile.out
Скрипт загрузки
nano /etc/init.d/pydbgpproxy.sh
#! /bin/sh ### BEGIN INIT INFO # Provides: Python Remote Debugging Client # Required-Start: $remote_fs dbus udev # Required-Stop: $remote_fs dbus udev # Should-Start: $syslog # Should-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Python Remote Debugging Client # Description: Python Remote Debugging Client. ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="Python Remote Debugging Client" NAME="pydbgpproxy" DAEMON=/usr/local/bin/pydbgpproxy PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/pydbgpproxy.sh DAEMON_OPTS="-i 0.0.0.0:9001 -d 9000" DAEMON_LOG=/var/log/$NAME.log # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 . /lib/lsb/init-functions test -f /etc/default/pydbgpproxy && . /etc/default/pydbgpproxy # # Function that starts the daemon/service. # --background d_start() { start-stop-daemon --oknodo --make-pidfile --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $DAEMON_OPTS 1>$DAEMON_LOG 2>&1 & return "$?" } # # Function that stops the daemon/service. # d_stop() { start-stop-daemon --stop --quiet --pidfile $PIDFILE return "$?" } case "$1" in start) if [ -f $PIDFILE ]; then echo "$NAME is running." exit 0 fi log_daemon_msg "Starting $DESC" "$NAME" d_start case "$?" in 0) log_end_msg 0 ;; 1) log_progress_msg "already started" log_end_msg 0 ;; *) log_end_msg 1 ;; esac ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" d_stop case "$?" in 0) log_end_msg 0 ;; 1) log_progress_msg "already stopped" log_end_msg 0 ;; *) log_end_msg 1 ;; esac if [ -f $PIDFILE ]; then rm $PIDFILE fi ;; restart|force-reload) $0 stop $0 start ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
# chmod 775 /etc/init.d/pydbgpproxy.sh # chkconfig pydbgpproxy.sh on
Запуск в коде
ini_set('xdebug.profiler_enable', 1);
xdebug_enable(); xdebug_disable();
<?php xdebug_start_code_coverage(); function a($a) { echo $a * 2.5; } function b($count) { for ($i = 0; $i < $count; $i++) { a($i + 0.17); } } b(6); b(10); var_dump(xdebug_get_code_coverage()); ?>
Подробнее