MacOS Big Sur M1(ARM)环境XAMPP下Xdebug无法连接架构不匹配求助
我对MacOS系统尚不熟练,已尝试各类方法配置Xdebug调试环境均未成功。我在MacOS Big Sur M1(ARM)设备上安装了XAMPP,使用VSCode作为代码编辑器,安装Xdebug后始终无法正常运行,判断为连接失败。
已完成配置
1. php.ini配置
[XDebug] zend_extension = /Applications/XAMPP/xamppfiles/lib/php/extensions/xdebug.so xdebug.remote_port = 9003 xdebug.profiler_enable = 1 xdebug.profiler_output_dir = "/Applications/XAMPP/xamppfiles/temp" xdebug.remote_handler = "dbgp" xdebug.remote_host = "localhost" xdebug.remote_enable = On xdebug.trace_output_dir = "/Applications/XAMPP/xamppfiles/temp"
2. VSCode的launch.json配置
{ "type": "php", "request": "launch", "port": 9003 }
我已确认xdebug.so文件确实位于上述配置的路径中。
问题更新
查看错误日志得到如下报错:
[12-Oct-2021 07:00:06 UTC] PHP Warning: Failed loading Zend extension 'xdebug' (tried: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20190902/xdebug (dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20190902/xdebug, 9): image not found), /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so (dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so, 9): no suitable image found. Did find:
/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so: mach-o, but wrong architecture
/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so: mach-o, but wrong architecture)) in Unknown on line 0
Xdebug官方说明Mac端仅支持通过homebrew安装的PHP环境,而homebrew安装的PHP与XAMPP自带PHP并非同一环境。我一度认为无法同时使用XAMPP和Xdebug,只能改用系统集成的apache。
Xdebug Wizard提示:
Install the pre-requisites for compiling PHP extensions.
On your Mac, we only support installations with 'homebrew', and brew install php && brew install autoconf should pull in the right packages.
此前终端查询到的PHP版本为homebrew安装的版本,我已经将其卸载,推测之前编译Xdebug执行./configure时读取了homebrew的PHP路径,导致编译出的扩展架构不正确。目前我已经尝试了多种方案仍未找到解决方法,恳请各位提供可行的解决思路。
核心问题定位
你的报错已经明确指向架构不匹配:之前编译的xdebug.so是适配Homebrew PHP的架构,和XAMPP自带的PHP架构不一致。M1设备上的XAMPP如果是官方Intel版本,运行在Rosetta转译下,需要对应编译适配XAMPP PHP版本的xdebug扩展。
可行解决步骤
确认XAMPP自带PHP的版本和架构
打开终端执行如下命令,调用XAMPP自带的PHP二进制文件,不要用系统全局的PHP:/Applications/XAMPP/xamppfiles/bin/php -v /Applications/XAMPP/xamppfiles/bin/php -i | grep "Architecture"记录下PHP大版本(比如7.4、8.0)、线程安全状态(TS/NTS)、架构信息(x86_64/arm64)。
指定XAMPP的phpize编译Xdebug
下载对应Xdebug版本的源码包,编译时全程指定XAMPP自带的phpize和php-config:# 进入解压后的xdebug源码目录 cd xdebug-xxx # 调用XAMPP自带的phpize /Applications/XAMPP/xamppfiles/bin/phpize # 配置时指定XAMPP的php-config ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config # 编译安装 make && make install编译完成后生成的xdebug.so会自动放到XAMPP的扩展目录下,不需要手动移动。
修正php.ini配置(适配Xdebug3版本,原配置为旧版Xdebug2的参数)
如果你安装的是Xdebug3,旧的remote_开头参数已经废弃,替换为如下配置:[XDebug] zend_extension = xdebug.so xdebug.mode = debug,develop xdebug.start_with_request = yes xdebug.client_port = 9003 xdebug.client_host = localhost xdebug.log = "/Applications/XAMPP/xamppfiles/temp/xdebug.log"验证扩展加载状态
重启XAMPP的Apache服务,执行如下命令确认Xdebug加载成功:/Applications/XAMPP/xamppfiles/bin/php -m | grep xdebug输出xdebug即为加载成功,后续VSCode的launch.json配置无需修改即可正常断点调试。
替代方案
如果编译始终失败,可以直接切换到Homebrew全家桶环境:用brew install php安装ARM原生PHP,搭配brew install httpd使用Apache,和Xdebug兼容性更好,无需处理架构适配问题。
内容的提问来源于stack exchange,提问作者Robbie

