VSCode 中的 Xdebug 不会在命令行的 Laravel artisan 命令的断点处停止
Posted
技术标签:
【中文标题】VSCode 中的 Xdebug 不会在命令行的 Laravel artisan 命令的断点处停止【英文标题】:Xdebug in VSCode does not stop on breakpoint for Laravel artisan commands from command line 【发布时间】:2021-12-31 14:01:45 【问题描述】:我在本地机器 (MacOS Cathalina) 上开发 Laravel 7 webapp。对于调试,我使用 VSCode、php Debug 和 Xdebug (3.0.4)。
当我在浏览器中以调试模式打开页面时,执行将在第一行停止,并按预期设置断点。
但是,当我从终端运行php artisan
命令时,执行根本不会在断点处停止。我知道代码可以运行,因为我可以将跟踪打印到日志中。
我在 VSCODE 中使用“Listen to XDebug”选项,这在过去可以正常工作,但我不知道有什么改变。
我尝试将 all possible configs 添加到我的 php.ini 中,但它没有帮助(在重新启动我的 MAMP 之后):
[xdebug]
zend_extension=/Applications/MAMP/bin/php/php7.4.2/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.remote_autostart=on
xdebug.client_host=localhost
xdebug.client_port = 9003
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9003
xdebug.remote_connect_back = 1
xdebug.idekey = VSCODE
这里是我的launch.json供参考:
"version": "0.2.0",
"configurations": [
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"log": true
,
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "$file",
"cwd": "$fileDirname",
"port": 9003,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env":
"XDEBUG_MODE": "debug,develop",
"XDEBUG_CONFIG": "client_port=$port"
,
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-S",
"localhost:0"
],
"program": "",
"cwd": "$workspaceRoot",
"port": 9003,
"serverReadyAction":
"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
"uriFormat": "http://localhost:%s",
"action": "openExternally"
]
/Applications/MAMP/bin/php/php7.4.2/bin/php --ini 的输出
Configuration File (php.ini) Path: /Applications/MAMP/bin/php/php7.4.2/conf
Loaded Configuration File: /Applications/MAMP/bin/php/php7.4.2/conf/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
/Applications/MAMP/bin/php/php7.4.2/bin/php -m的输出
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
imap
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
Reflection
session
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib
[Zend Modules]
Xdebug
哪个php的输出
/usr/bin/php
/Applications/MAMP/bin/php/php7.4.2/bin/php artisan test:xdebug 的输出
__ __ _ _
\ \ / / | | | |
\ V / __| | ___| |__ _ _ __ _
> < / _` |/ _ \ '_ \| | | |/ _` |
/ . \ (_| | __/ |_) | |_| | (_| |
/_/ \_\__,_|\___|_.__/ \__,_|\__, |
__/ |
|___/
Version => 3.0.4
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support
Enabled Features<br/>(through 'xdebug.mode' setting)
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✔ enabled
Tracing => ✘ disabled
Diagnostic Log
[Step Debug] WARN: Creating socket for 'localhost:9003', poll success, but error: Operation now in progress (19).
[Step Debug] WARN: Creating socket for 'localhost:9003', poll success, but error: Operation now in progress (19).
[Step Debug] ERR: Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(
PHP
Build Configuration
Version => 7.4.2
Debug Build => no
Thread Safety => disabled
Settings
Configuration File (php.ini) Path => /Applications/MAMP/bin/php/php7.4.2/conf
Loaded Configuration File => /Applications/MAMP/bin/php/php7.4.2/conf/php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
Directive => Local Value => Master Value
xdebug.mode => debug => debug
xdebug.start_with_request => yes => yes
xdebug.start_upon_error => default => default
xdebug.output_dir => /var/tmp/ => /var/tmp/
xdebug.trigger_value => no value => no value
xdebug.file_link_format => no value => no value
xdebug.filename_format => no value => no value
xdebug.log => /Applications/MAMP/bin/php/php7.4.2/lib/php/extensions/no-debug-non-zts-20190902/xdebug.log => /Applications/MAMP/bin/php/php7.4.2/lib/php/extensions/no-debug-non-zts-20190902/xdebug.log
xdebug.log_level => 7 => 7
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3
xdebug.max_nesting_level => 256 => 256
xdebug.cli_color => 0 => 0
xdebug.force_display_errors => Off => Off
xdebug.force_error_reporting => 0 => 0
xdebug.halt_level => 0 => 0
xdebug.max_stack_frames => -1 => -1
xdebug.show_error_trace => Off => Off
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
xdebug.profiler_append => Off => Off
xdebug.cloud_id => no value => no value
xdebug.client_host => localhost => localhost
xdebug.client_port => 9003 => 9003
xdebug.discover_client_host => Off => Off
xdebug.client_discovery_header => no value => no value
xdebug.idekey => VSCODE => VSCODE
xdebug.connect_timeout_ms => 200 => 200
xdebug.scream => Off => Off
xdebug.gc_stats_output_name => gcstats.%p => gcstats.%p
xdebug.trace_output_name => trace.%c => trace.%c
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.collect_assignments => Off => Off
xdebug.collect_return => Off => Off
如果您对如何调试此问题或可能导致此类行为有任何提示,请告诉我。
【问题讨论】:
如果你在 VSCode 中使用“Listen for Xdebug”配置并且这些 Xdebug 设置是正确的,那么它现在应该可以工作了。如果它不起作用,那么很可能您的 Xdebug 配置不适用于 CLI 环境,并且仅适用于 Web 服务器。执行以下操作:1) 运行php --ini
并显示输出 2) 制作一些临时工匠命令(例如 xdebug-test
)并将 xdebug_info();
放入该命令代码中。 3) 在 CLI (php artisan xdebug-test
) 中运行该命令并显示整个输出——需要查看 CLI 环境的 LIVE/实际 Xdebug 设置。
@LazyOne 感谢上述提示。 php --ini 并没有真正从项目文件夹中给我任何有用的东西,我将其添加到帖子中。你想看看 phpinfo() 的输出吗?哪一部分?我还创建了 temp artisan 命令,但 xdebug_info() 未被识别为函数,因此我收到一条错误消息。我应该如何运行?谢谢!
这意味着您的终端中的 PHP 没有在您的操作系统范围的 PHP 中配置 Xdebug。试试php -m
——你看到那里列出了xdebug
模块吗? which php
的输出是什么(或者可能是 where php
——我在 Windows 上,所以不确定 Mac 上哪个是正确的)
也尝试执行/Applications/MAMP/bin/php/php7.4.2/php
(我认为这将是正确的路径,但不是非常确定)。它有效吗?如果是 - 尝试使用 --ini
参数并在您的 php artisan xdebug-test
命令中使用该路径而不是 php
。
“随意添加解决方案,你真的帮我解决了这个问题。非常感谢!”我建议你发布你自己的答案(你可以稍后接受)与所有步骤。这将帮助处于类似情况的其他人(接受答案的问题比一堆 cmets 更明显)。
【参考方案1】:
终于在@LazyOne 的帮助下,我可以解决这个问题。
问题的根本原因是由于 macOS 更新,我在 VSCODE 中的终端被替换为新终端 zsh。
此终端没有配置正确的 php 路径/版本,因此当我从命令行运行 artisan 命令时,我使用未安装 Xdebug 的默认 php 版本运行它。
当我将路径更改为安装在我的 MAMP 包下的 php 版本时,它就可以工作了。为了方便起见,我在 zsh 配置文件中添加了一个别名,指向正确的 php 版本。
【讨论】:
以上是关于VSCode 中的 Xdebug 不会在命令行的 Laravel artisan 命令的断点处停止的主要内容,如果未能解决你的问题,请参考以下文章
带有 Xdebug 的 PHPUnit 测试资源管理器 - VSCode