php -i
// 又或者运行这句
php -r 'phpinfo();'
在 php.ini 的最后加上以下内容
[Xdebug]
; xdebug 拓展的 so 或 dll 的路径,这里最好填绝对路径
zend_extension = path/to/xdebug
; 日志路径
; xdebug.remote_log = ""
; 是否开启远程调试
xdebug.remote_enable = on
; 允许调试的客户端IP
xdebug.remote_host = 127.0.0.1
; 远程调试的端口
xdebug.remote_port = 9003
; 开启远程调试自动启动
; xdebug.remote_autostart = on
; 显示局部变量
xdebug.show_local_vars = on
; 显示默认的错误信息
xdebug.default_enable = on
; ide key
xdebug.idekey = "vscode"
; 是否开启分析器
; xdebug.profiler_enable = on
; 分析器文件路径
; profiler_output_dir = ""
; 启用 trace
; xdebug.auto_trace = 1
; 跟踪输出路径
; xdebug.trace_output_dir = ""
; 当这个设置设为其他不等于 0 的值时,Xdebug 会生成易于人类阅读的跟踪文件
; xdebug.show_mem_delta = 1
; trace 输出的格式 0 文本文件, 1 有格式的文本文件, 2 html
; xdebug.trace_format = 0
; 参数信息显示 0 不记录, 1 类型和数量, 2 类型和数量并附带提示信息, 3 完整变量内容, 4 完整变量内容和名称, 5 序列化变量内容
; xdebug.collect_params = 1
; 是否应该将函数调用的返回值写入跟踪文件
; xdebug.collect_return = On
[Xdebug]
zend_extension = path/to/xdebug
xdebug.mode = "debug"
xdebug.idekey = "vscode"
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.connect_timeout_ms = 2000
xdebug.start_with_request = "trigger"
2.9 配置参考文档
在 VSCode 的拓展里搜索对应的插件名然后选择安装即可。
IntelliSense 的插件有两个, IntelliSense 只需要装一个就可以的了,笔者更喜欢用 PHP Intelephense 。
如果配置启用了自动调试,那么脚本的运行命令就不需要额外的参数, 浏览器也不需要 Xdebug Helper 插件。 但是这样会所有请求都启用调试。
php -d xdebug.remote_autostart=on test.php
php -d xdebug.start_with_request=yes test.php
export XDEBUG_SESSION=vscode; php test.php
export XDEBUG_SESSION=vscodetest; php -d xdebug.idekey=vscodetest test.php
set XDEBUG_SESSION=vscode && php test.php
$Env:XDEBUG_SESSION = "vscode"; php test.php
xdebug.idekey = "vscode"
XDEBUG_SESSION=vscode
), php 检测到 xdebug.idekey 后就会通知 IDE 启动调试 document.cookie="XDEBUG_SESSION=vscode"
XDEBUG_SESSION=vscode
,就是触发调试的了,类似于这样 curl -k --cookie "XDEBUG_SESSION=vscode" http://testurl
profiler 文件可以用 QCacheGrind 查看; trace 的文件是纯文本的,可以直接打开的。
https://sourceforge.net/projects/qcachegrindwin/
xdebug.profiler_enable = on
xdebug.profiler_output_dir = ""
https://github.com/jokkedk/webgrind