Visual Studio Code的PHP调试控制台是否是交互式的?

28

我正在使用 Visual Studio Code 1.16.1 以及 Felix Becker 的 PHP Debug extension。我可以正常连接到 XDebug,并且可以在调试窗格中设置断点和查看变量,没有任何问题。

然而,调试控制台似乎有些无用,我只能运行超级基本的 PHP 命令,并且似乎无法很好地评估常规的 PHP 命令或与我的应用程序交互。

当尝试在调试控制台中键入任何 PHP 语句或表达式时,我始终会收到 error evaluating code 的错误提示。似乎我所能做的就是声明变量、数组和对象。

我不能声明类、函数或使用控制结构 (if, foreach 等)。

可行:

$x = 4
//4

$x
//4

$x = new stdClass();
//stdClass

$x = [];
//array(0)

($x) ? yes : no
// yes

(!$x) ? yes : no
// no

preg_replace('/dog/', 'cat', 'The quick brown fox jumps over the lazy dog.')
// "The quick brown fox jumps over the lazy cat."

request()
//Illuminate\Http\Request (Laravel helper methods work)

无法工作:

echo "yes"
//error evaluating code

if ($x == 4) { echo "yes" }
//error evaluating code

for ($i=0; $i < 5; $i++) { }
//error evaluating code

function foo() {}
//error evaluating code

class SimpleClass {}
//error evaluating code

$var_dump($x)
//null

调试控制台是否应该像真正的REPL一样工作?我知道PHPStorm的控制台可以评估任何你投入其中的PHP代码,Visual Studio Code能否做到同样的事情?还有其他人遇到这个问题吗?

谢谢。

输入图片描述


3
更新:我了解到 var_dump 会将错误报告到控制台,但在使用“监听 XDebug”模式时会将输出发送到浏览器。 - JP Lew
2
更新2:扩展开发人员表示,这与PHP Debug扩展无关,这完全是xdebug的问题:https://github.com/felixfbecker/vscode-php-debug/issues/192 - JP Lew
3
更新 3:据开发人员说,这是它应该工作的方式:https://bugs.xdebug.org/view.php?id=1476。声明类和函数不返回值。而 echovar_dump 将其输出发送到浏览器,而不是 STDOUT。无论如何,在我的调试流程中,我已经学会不使用控制台。我只在调试面板中查看变量,并在常规编辑器窗口中更新和刷新代码。 - JP Lew
3
很遗憾,PHP Storm 在开发 PHP 方面提供了更好的体验 :/ - jpenna
我的经验和你的类似:你可以在控制台中执行一些基本操作,比如评估作用域内的变量,但我认为你不能使用更复杂的语句或定义/更改值。 - fbas
2个回答

1

TL;DR; 这是一个与XDebug相关的问题,与OP的扩展无关,取消监视变量可能会修复XDebug的行为。


这个问题与OP的扩展无关,它是一个与XDebug相关的问题。

许多人通过从VSCode的调试视图中的“监视”列表中删除变量来解决此问题。

在以下屏幕截图中,红色箭头指示了一个按钮,您可以一次单击删除所有监视表达式:

VSCode's watch variable section

另请参阅:github.com/xdebug/vscode-php-debug/issues/192


-1

你受限于实际的调试。与像 Python 或 Javascript 控制台中玩耍不同,与活跃程序交互可以修复它。如果你想创建一些脚本,请创建一个 PHP CLI 文件。

你应该使用 print 而不是 echo 和 var_dump() 而不是 $var_dump()。然后这取决于你是在 CLI 模式还是 FPM 模式(Web 服务器)下。如果你在调试会话中连接到 Web 服务器,则不会将输出打印回调试器终端,而是打印回 Web 服务器响应。


我可以确认由于某种奇怪的原因, print 确实能够工作。它总是向调试控制台返回 1 并将字符串发送到 Web 服务器。如果您想打印到调试控制台,您可能想尝试 print_r($variable, true);,因为它可以正确格式化数组并更容易地理解变量或函数返回的值的内容。 - Jacopo Tedeschi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接