我将配置PHPStorm关于在PHP中使用xDebug调试的选项,阅读手册中的这一页:http://www.jetbrains.com/phpstorm/webhelp/configuring-breakpoints.html
在步骤2中,有:"要在断点上下文中求值表达式并在调试控制台中显示其值,请检查选项Log求值表达式,并在选项字段中输入有效表达式。"。
现在,哪个应该是一个"有效表达式"?
例如,我的断点("points"是正确的技术动词/术语吗?)指向Joomla!cms库文件(参见:https://github.com/joomla/joomla-cms/blob/3.2.x/libraries/joomla/input/input.php#L341)。
这是一个反序列化序列化字符串的方法,它破坏了我的单元测试。所以我想知道字符串传递给方法时的值。
第341行,测试中断的地方,使用list() PHP结构将传递的$input的未序列化值分配给3个不同的属性。
但是unserialize($input)函数不起作用,我想知道为什么,所以我设置了断点。
/**
* Method to unserialize the input.
*
* @param string $input The serialized input.
*
* @return JInput The input object.
335 *
336 * @since 12.1
337 */
338 public function unserialize($input)
339 {
340 // Unserialize the options, data, and inputs.
() 341 list($this->options, $this->data, $this->inputs) = unserialize($input);
342
343 // Load the filter.
344 if (isset($this->options['filter']))
...
现在,因为我想知道$input的值,因为它是unserialize()无法处理的字符串,我想我必须在PHPStorm中使用选项"日志评估表达式",这样它就会在控制台登录$input的值,但是,再一次,我应该在PHPStorm的字段中写什么?
根据问题跟踪器,此问题仍在发生或从未重现。这张票还有效。
但是,如果你想在不挂起代码执行的情况下看到该值,那么应该能够使用该选项。目前,您可能还需要检查Suspend
选项。
在您的情况下,一个有效的表达式就是$input
。你可以更复杂,比如"$this->id is being validated."
。注意,表达式中没有包含echo
或其他内容,它是一个表达式。
根据我的经验,控制台根本没有更新。当PHPStorm改变焦点时,你可以看到输出闪烁