【问题标题】:have xdebug skip certain functions when debugging让 xdebug 在调试时跳过某些功能
【发布时间】:2011-10-27 05:00:17
【问题描述】:

所以基本上我使用 Zend Framework 的自动加载器来自动加载我的函数。但是正因为如此,每当我在调试时,如果我调用任何函数,xdebug 都会在转到正在调用的实际函数之前转到自动加载函数。

所以如果我调用函数func(),它将首先转到autoload(),然后是func(),这会增加调试时间等成本

理想情况下,如果我调用 func(),它应该在仍然使用自动加载器的同时直接转到 func()。

有没有办法指定 xdebug(或使用任何 PHP/Zend hack 等)在我调试时总是跳过某个函数(在这种情况下是我的自动加载函数)?

【问题讨论】:

  • “进入自动加载功能”是什么意思? xdebug 如何“去”那里?
  • 调试器进入自动加载功能
  • 是的,因为这就是您的程序所做的。隐藏它然后在那里有一个错误可能会更烦人。我不太明白这会如何显着增加“调试成本”......
  • 不,这更烦人。这是zend代码,所以没有错误。这增加了调试成本,因为每次调用我真正有兴趣调试的任何其他函数时,我都必须继续执行我对调试不感兴趣的函数
  • 我一定是遗漏了一些东西。但是你不能在你感兴趣的函数中设置一个断点吗?

标签: php debugging zend-framework xdebug


【解决方案1】:

在偏好设置中使用 pdt 的 Eclipse 中: PHP -> 调试 -> 分步过滤 点击添加过滤器,我添加了 Autoloader.inc 并且不再需要通过它

查看step_filtering_preferences了解更多视觉说明

【讨论】:

    【解决方案2】:

    我知道这是一个老问题,但我是从谷歌来到这里的。 在 phpStorm 中,您可以忽略将其添加到的特定函数:

    首选项 > PHP > 调试 > 步骤过滤器

    如果是非静态方法,则使用 ->,如果是静态方法,则使用 ::

    【讨论】:

    • 在 2019.2.2 中,它位于 Settings > Languages & Frameworks > PHP > Debug > Step Filters
    【解决方案3】:

    如果您是单步执行代码,那么您确实应该考虑使用断点。如果您在正在调查的代码块的开头设置断点,那么您可以使用“运行到断点”选项跳过在正在调查的代码之前运行的所有代码。

    如果您在要调查的类的构造函数的开头设置断点,或者如果您确定对象实例化正常,则可以在要调查的方法的开头设置断点,那么您可以跳过自动加载器。

    Netbeans 和 Eclipse PDT 都支持设置断点,只需单击要调查的代码的行号即可。

    此外,调试器中还有一个“step out”选项,可让您跳出使用“step in”选项跳入的函数/方法。如果您发现自己在自动装载机中,只需走出它。

    【讨论】:

    • 如果你离开自动加载器,典型的结果是你在函数完成后被发送到函数中,而不是被发送到函数中。断点可能很有用,但它们有一个问题。如果您希望仅在某些条件下调试函数,那么即使在您不关心的情况下,将断点放入其中也会导致它命中。因此,如果它是一个运行很多的函数,您将不得不继续 10 到 30 次才能到达您真正关心的部分。条件断点可能有效,但遗憾的是不支持。
    • XDebug 中确实没有条件断点,但解决这个问题并不难。只需执行if (condition) { do_some_kind_of_noop_here(); } 并将断点放在 noop 上
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2019-08-04
    • 2018-05-12
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多