lou*_*her 8 php xdebug laravel visual-studio-code
我使用带有PHP Debug扩展的Visual Studio Code来调试Laravel项目。但是有些断点被忽略了,我不知道为什么。我坚持并非所有断点都被忽略的事实。例如,方法声明处的所有断点都将被忽略,而变量声明处的所有断点将被命中。
我的Xdebug部分php.ini:
xdebug.profiler_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back=1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
Run Code Online (Sandbox Code Playgroud)
这是我的launch.json:
xdebug.profiler_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back=1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
Run Code Online (Sandbox Code Playgroud)
我试过的
示例:“•”表示行断点。下面的代码示例中的所有断点都将被忽略。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9001,
"log": true
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何在Visual Studio Code达到所有断点的情况下获取Xdebug,还是这是正常现象?预先感谢您的帮助。
更新#1(08/07/2019)
Zend扩展路径在我的php.ini下面指定。
zend_extension = "/usr/local/Cellar/php@7.2/7.2.18/pecl/20170718/xdebug.so"
Run Code Online (Sandbox Code Playgroud)
我试图添加php.validate.executablePath我的settings.json。
更新#2(08/08/2019)
根据此更新时的评论和答案,Xdebug忽略某些行是正常行为。我的问题是,为什么有些行会被忽略?哪些行被忽略?有正式名单吗?
在 PhpStorm 中运行它,但由于 Xdebug 在 PHP 上运行,行为是相同的。
当事情“完成”时,Xdebug 停止,即事情“完成”。这可以是函数调用、变量赋值、数据转换等。所有这些的共同点是它们必须是显式的。隐式赋值将被忽略。
Xdebug 不会暂停放置在操作“中”的断点的执行。这就是为什么代码中的第一个断点不起作用,而第二个断点却起作用。
显式和隐式示例:
$attributes = [ // this is implicitly an array, no pausing execution
'business_name' => 'DANONE' // this is explicitly assigned a string, execution paused
];
Run Code Online (Sandbox Code Playgroud)
一些屏幕截图(代码来自 Symfony 4 public/index.php,有一些明显的添加 - 蓝色背景暂停执行“当前行”):
清楚地执行if()语句内的函数 - 它暂停
正如我们所看到的,该数组的所有 3 行上都有断点。然而,它唯一暂停的是键/值对的分配。这是显式完成的,数组本身是隐式声明的。
这里我们显式声明$testArray为一个数组。所以:它暂停了。
这是完整的,可以在上面添加。隐式设置类型数组,但显式分配键/值。
所以:是的。
如果您将断点放置得稍有不同,它们就会暂停执行。不停留在隐含的问题上是正常行为。
完整:
在本地 Apache 安装中,我有以下配置:
[XDEBUG]
zend_extension = C:\xampp\php\ext\php_xdebug-2.7.1-7.3-vc15-x86_64.dll
xdebug.remote_mode = req
xdebug.remote_connect_back = 1
xdebug.default_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.max_nesting_level = 200;
Run Code Online (Sandbox Code Playgroud)
但我通常在 Docker 中运行它。在 PHP 图像中docker-compose:
environment:
PHP_XDEBUG_ENABLED: ${XDEBUG_ENABLED:-0}
PHP_IDE_CONFIG: ${PHP_IDE_CONFIG:-serverName=ProjectName}
XDEBUG_CONFIG: >
idekey=PHPSTORM
remote_host=${XDEBUG_REMOTE_HOST_IP:-host.docker.internal}
remote_port=${XDEBUG_REMOTE_PORT:-9000}
remote_enable=1
Run Code Online (Sandbox Code Playgroud)
XDEBUG_ENABLED环境配置设置为应用程序中)1docker-compose up并在Dockerfile
pecl install xdebug-2.7.2 redis && \
docker-php-ext-enable xdebug redis && \
Run Code Online (Sandbox Code Playgroud)
xdebug-2.7.2为您想要的版本/与您的 PHP 版本兼容,请在此处检查)编辑:根据对OP问题的评论进行补充。
有大量错误报告(请参阅这些评论,感谢LazyOne发现了它们)。
他提供的最后一个 URL 很有趣,因为它是关于即将推出的 V2.8.0(目前为 2.8.0beta1,不是一般版本),他在这张票中评论了Xdebug 不会暂停隐式赋值的执行:
我刚刚将其合并到 master 分支中,它将成为 2.8.0 的一部分。我很快就会发布 2.7.2(这周,今天?!),然后可能下周发布 2.8alpha1 版本,以便人们可以尝试一下。
(引自 Xdebug 作者 Derick 2019-05-06 12:49)
该路线图显示了将包含的所有功能/修复。
对于 2.8.0,它表明将添加对 IDE 的支持,以显示 IDE 是否可以解析断点。目前的发布日期定为 2019 年 9 月 30 日。
已发布