Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用异常断点时在PhpStorm堆栈中黑盒库_Php_Phpstorm_Xdebug - Fatal编程技术网

如何在使用异常断点时在PhpStorm堆栈中黑盒库

如何在使用异常断点时在PhpStorm堆栈中黑盒库,php,phpstorm,xdebug,Php,Phpstorm,Xdebug,我正在运行一些单元测试,通过Codeception使用PHPUnit,当断言失败时,我想关注测试类中断言失败的那一行 通常,我必须从终端输出中复制类名和行号,并使用PhpStorm的搜索和“goto line”找到它停止的位置。重复这样做很累(整天TDD) 我尝试在PhpStorm中启用“异常断点”,因此IDE在引发异常的行处停止。这通常很好,但在本例中,它位于断言库的深处。我希望IDE自动将堆栈反转到我的文件,并将注意力集中在那里。我可以在stack frame面板中手动执行该操作,当然它位于

我正在运行一些单元测试,通过Codeception使用PHPUnit,当断言失败时,我想关注测试类中断言失败的那一行

通常,我必须从终端输出中复制类名和行号,并使用PhpStorm的搜索和“goto line”找到它停止的位置。重复这样做很累(整天TDD)

我尝试在PhpStorm中启用“异常断点”,因此IDE在引发异常的行处停止。这通常很好,但在本例中,它位于断言库的深处。我希望IDE自动将堆栈反转到我的文件,并将注意力集中在那里。我可以在stack frame面板中手动执行该操作,当然它位于正确的行,但是它重复性很强,因此很累

我知道Xdebug有黑匣子工具:“跳过的路径”和“步骤过滤器>跳过的路径”,但这些似乎不会影响捕获异常的聚焦

我乐观地希望,如果我黑盒PHPUnit库文件,异常停止点可能必须向上冒泡,直到找到一个未黑盒的文件

e、 g

不是断言机制中的这个无关代码:

        throw new PHPUnit_Framework_ExpectationFailedException(
            trim($description . "\n" . $f->getMessage()),
            $f
        );
at
mylib/vendor/phpunit/phpunit/src/Framework/Constraint/IsEqual.php:138
另一个奇怪之处是,当异常断点打开时,IDE不会像普通断点那样进入前台焦点,而且内部焦点在代码面板中,而不是像往常一样在堆栈框架面板中。因此,我只关注外部终端窗口(而不是内置IDE终端)。如果它确实聚焦IDE窗口,并且在默认情况下聚焦在堆栈面板上,那么我可以只按下向下箭头三次。我可以忍受那种程度的RSI

MacOS 10.12.6

PhpStorm 2018.3.5

步骤过滤器用于单步执行程序,不会影响断点。这里有一个请求,要求跳过的路径支持异常断点:

我找到了一个子解决方案来解决我的一个子投诉(第二段),这减少了对完整解决方案的需要

PHPStorm(2018.3)支持搜索框中的
file:line
格式,因此您无需使用搜索然后转到line。这相当节省时间


因此,我只需从终端中堆栈跟踪的中间复制
TestSessionTest.php:93
,然后双移位,将其粘贴到IDE中。它直接跳到文件中的行。

步骤筛选器用于单步执行程序,它不影响断点。这里有一个请求,要求跳过的路径支持异常断点:谢谢Eugene,我投了赞成票。如果您不这样做,我将添加一个答案,然后希望在将来开发时更新它。
    $this->assertEquals($now, $ts->datetimeStarted);
at
mylib/tests/src/Domain/TestSession/TestSessionTest.php:93
        throw new PHPUnit_Framework_ExpectationFailedException(
            trim($description . "\n" . $f->getMessage()),
            $f
        );
at
mylib/vendor/phpunit/phpunit/src/Framework/Constraint/IsEqual.php:138