配置wsl的php-xdebug

  • 官方文档: http://xdebug.org/docs/install

我本地是php 7.1使用2.7.X版本 目前最新的支持 PHP version >= 7.2.0 and < 8.2.0

  • 步骤

wget https://github.com/xdebug/xdebug/archive/refs/tags/2.7.2.tar.gz -O xdebug-2.7.2.tar.gz
tar xvf xdebug-2.7.2.tar.gz
cd xdebug-2.7.2
/home/jcleng/.nix-profile/bin/phpize
./configure --enable-xdebug --with-php-config=/home/jcleng/.nix-profile/bin/php-config
make

# 安装, 可看到安装目录 ls /nix/store/499zg22sagzbbg27z5hlb466qpj88va6-php-7.1.33/lib/php/extensions/
make install

# 查看php.ini位置
## cli模式查看
php --ini
## fpm模式可能不是使用的同一个文件,最好使用phpinfo()方法浏览查看

## 如果默认没有php.ini文件, 那么创建php.ini文件到Scan this dir for additional .ini files 目录之内
## 查看can this dir for additional .ini files 目录
php --info|grep .ini

# 配置php.ini文件, 把以下配置写到php.ini文件, 加载xdebug.so以及开启远程调试
# vi /etc/php.d/php.ini

xdebug.remote_enable = On
xdebug.remote_host = localhost
xdebug.remote_port = 9300
xdebug.show_local_vars = On
;启用远程调试
xdebug.remote_autostart= On
xdebug.remote_connect_back=On
zend_extension=/nix/store/499zg22sagzbbg27z5hlb466qpj88va6-php-7.1.33/lib/php/extensions/xdebug.so
# 或直接
# zend_extension=xdebug.so

# 写入配置之后
## cli模式查看扩展是否生效,能正常输入即可
php --ri xdebug

## fpm模式请重启fpm, 然后进入phpinfo()页面查看
sudo pkill php-fpm
php-fpm
  • vscode插件felixfbecker.php-debug配置.vscode\launch.json文件进行断点调试, 注意项目请使用 vscode wsl方式打开

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "php-debug",
            "type": "php",
            "request": "launch",
            "port": 9300,
            "hostname": "localhost"
        }
    ]
}
  • xdebug3

[xdebug]
zend_extension=php_xdebug-3.0.4-8.0-vs16-nts-x86_64.dll
;启用远程调试
xdebug.mode=develop,debug,profile,trace
xdebug.client_host = localhost
xdebug.client_port = 9301
xdebug.show_local_vars = Off
xdebug.show_error_trace = Off
xdebug.force_display_errors = Off
xdebug.start_with_request = yes
xdebug.remote_handler=dbgp
  • macos的php80 编译xdebug报错,修改文件

/* 文件: /nix/store/1dq8fmsfs2rjnxi39ankw6h921qyblxs-dev-jcleng-php80-8.0.17/include/php/Zend/zend_operators.h
*/
# ZEND_USE_ASM_ARITHMETIC修改未0

#if defined(HAVE_ASM_GOTO) && !__has_feature(memory_sanitizer)
# define ZEND_USE_ASM_ARITHMETIC 0
#else
# define ZEND_USE_ASM_ARITHMETIC 0
#endif