我正在使用带有PHP Debug扩展的Visual Studio Code来调试Laravel项目。但是某些断点被忽略了,我无法弄清为什么。我坚持认为并非所有断点都被忽略。例如,所有方法声明处的断点都被忽略,但在变量声明处的断点会被触发。
我的php.ini文件中与Xdebug相关的部分:
xdebug.profiler_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back=1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
这是我的launch.json
文件:
{
// 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
}
]
}
我尝试过:
- 将默认端口9000更改为9001
- 卸载并重新安装PHP调试扩展(你永远不知道)
示例:在代码示例中,“•”表示行断点。所有断点都被忽略。
public function testCreateWhenAllParametersAreCorrectlySpecifiedReturnsCompany()
{
• $attributes = [
'business_name' => 'DANONE'
];
$address = factory(Address::class)->create();
$company = Company::create($attributes, $address);
$this->assertInstanceOf(Company::class, $company);
$this->assertDatabaseHas('companies', [
• 'address_id' => $address->id,
'business_name' => 'DANONE'
]);
}
如何在Visual Studio Code中启用Xdebug,以便能够命中所有断点或者这是正常行为?感谢您的帮助。更新 #1(08/07/2019):
我的php.ini中指定了Zend扩展路径,如下所示。
zend_extension = "/usr/local/Cellar/php@7.2/7.2.18/pecl/20170718/xdebug.so"
我试图在我的settings.json
文件中添加php.validate.executablePath
。
更新#2(2019年8月8日)
根据此更新时的评论和答案,Xdebug忽略某些行是正常行为。那么我的问题是:为什么会忽略某些行?哪些行被忽略了?是否有官方清单?
xdebug_break();
并查看是否会触发它。附言:建议在实际的代码行上设置断点,最好是单行/简单指令。由于 PHP 生成的字节码方式不同,某些断点的行与您预期的不同(例如,多行数组声明-它将位于中间某个位置)。附言2:也许 VSC 不支持“方法断点”(当它放置在函数声明行上时)。 - LazyOne