PHP отладчик XDebug
Подключение и настройка
v2.*
[Xdebug] zend_extension=xdebug.so xdebug.remote_enable=1 xdebug.remote_autostart=1 xdebug.remote_connect_back=off xdebug.remote_host=host.docker.internal ;# 9000 is default (not required to set). xdebug.remote_port=9000
v3.*
[Xdebug] zend_extension=xdebug.so xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal ;# 9003 is now the default (set this for old PhpStorm settings). xdebug.client_port=9000
xdebug.ini
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 xdebug.cli_color=1 xdebug.scream=0 ; Limits xdebug.var_display_max_depth = 5; -1 No limit xdebug.var_display_max_children = 256; -1 No limit xdebug.var_display_max_data = 1024; -1 No limit ; 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_connect_back = 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
Основные настройки
- xdebug.remote_autostart
- xdebug.remote_host
- xdebug.var_display_max_depth = 5; -1 No limit
- xdebug.var_display_max_children = 256; -1 No limit
- xdebug.var_display_max_data = 1024; -1 No limit
Web XDebug
XDEBUG_SESSION_START=xdebug XDEBUG_SESSION=xdebug
Console XDebug
$ export PHP_IDE_CONFIG="serverName=www.host-name.ztc" && export XDEBUG_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());
?>
Подробнее




