如何从 XDebug 会话中中断 foreach 循环?
How to break foreach loop from a XDebug session?
我有一个 foreach 循环,它正在做一些耗时的事情:
$someHugeArray = [...]; // having beyond 300 to 1000 items
foreach ($someHugeArray as $item) {
$this->applyTimeConsumingMagic($item);
}
调试时我尽量避免重复所有项目,所以我经常按照以下行编写转义代码:
foreach ($someHugeArray as $i => $item) {
$this->applyTimeConsumingMagic($item);
if ($i > 10) { break; } // @fixme: should not go live
}
正如评论所指出的那样,这样的事情曾经上线过,让我觉得自己像个业余爱好者。
有没有什么方法可以在不编写 var_dumpy 代码的情况下从 XDebug 会话中中断 foreach
循环?作为 IDE 我使用 PhpStorm。
我没有找到即时中断 foreach 循环的方法,但接下来最好的办法就是即时减小数组大小。
- 设置数组后设置断点,最好在循环开始之前设置。 (它也在循环内工作,但可能会有奇怪的行为)
- Select
Evaluate expression
phpstorm 的调试 window 或使用快捷方式,默认应该是 Alt + Shift + 8
- 运行
$someHugeArray = array_slice($someHugeArray, $offset = 0, $length = 10);
此外 array_slice one could also use array_filter 如果您想使用闭包按更具体的条件进行过滤。
现在你有一个小数组,享受快速执行时间,而不必担心在调试会话后进行清理。
这将在 10 日打破循环 运行 通过 - 但显然可以设置为 2 或 3 等:
$myArray = $this->getHugeDataArray();
$i = 0; //here we set i to 0 so we can count to 10
foreach ($myArray as $key => $value)
{
$i++;
if ($i == 9) {break;}
//rest of actual code
}
我有一个 foreach 循环,它正在做一些耗时的事情:
$someHugeArray = [...]; // having beyond 300 to 1000 items
foreach ($someHugeArray as $item) {
$this->applyTimeConsumingMagic($item);
}
调试时我尽量避免重复所有项目,所以我经常按照以下行编写转义代码:
foreach ($someHugeArray as $i => $item) {
$this->applyTimeConsumingMagic($item);
if ($i > 10) { break; } // @fixme: should not go live
}
正如评论所指出的那样,这样的事情曾经上线过,让我觉得自己像个业余爱好者。
有没有什么方法可以在不编写 var_dumpy 代码的情况下从 XDebug 会话中中断 foreach
循环?作为 IDE 我使用 PhpStorm。
我没有找到即时中断 foreach 循环的方法,但接下来最好的办法就是即时减小数组大小。
- 设置数组后设置断点,最好在循环开始之前设置。 (它也在循环内工作,但可能会有奇怪的行为)
- Select
Evaluate expression
phpstorm 的调试 window 或使用快捷方式,默认应该是 Alt + Shift + 8 - 运行
$someHugeArray = array_slice($someHugeArray, $offset = 0, $length = 10);
此外 array_slice one could also use array_filter 如果您想使用闭包按更具体的条件进行过滤。
现在你有一个小数组,享受快速执行时间,而不必担心在调试会话后进行清理。
这将在 10 日打破循环 运行 通过 - 但显然可以设置为 2 或 3 等:
$myArray = $this->getHugeDataArray();
$i = 0; //here we set i to 0 so we can count to 10
foreach ($myArray as $key => $value)
{
$i++;
if ($i == 9) {break;}
//rest of actual code
}