PHPStorm,断点配置:一个“日志表达式”的例子,并在选项字段中输入一个有效的表达式


PHPStorm, breakpoints configuration: an example of "Log evaluated expression, and enter a valid expression in the option field."?

我将配置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改变焦点时,你可以看到输出闪烁