我试图找出某个对象的某些属性在哪里被修改了。由于PHP具有高度动态的特性($o->$prop = $val等),因此通过简单的代码分析实际上是不可能做到的。有没有一种方法可以启动调试 session 并在修改属性的行处中断? (在简单的情况下,将带条件的__set调用的魔术xdebug_break()添加到类中可能会有所帮助,但是如果该类或其祖先之一已经具有魔术 setter ,则它会变得非常复杂,因此也不是一个好的解决方案。)

最佳答案

根据xdebug文档,似乎应该有一种方法可以中断变量更改。
http://xdebug.org/docs-dbgp.php#breakpoints



但是源代码表明该文档领先于其实际功能:
https://github.com/xdebug/xdebug/blob/master/xdebug_handler_dbgp.c#L875

if (strcmp(CMD_OPTION('t'), "watch") == 0) {
        RETURN_RESULT(XG(status), XG(reason), XDEBUG_ERROR_BREAKPOINT_TYPE_NOT_SUPPORTED);
    }

我实际上无法在存储库中的其他任何地方找到字符串“watch”,因此我认为当前不支持该字符串。

Xdebug的错误跟踪器中似乎存在该错误:

http://bugs.xdebug.org/view.php?id=514

关于php - 中断Xdebug中的属性更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14900850/

10-16 00:41