PHPStorm /调试器不会在某些断点处停止

Sim*_*mon 5 zend-framework xdebug magento phpstorm

我已经为Mac OS(Apache 2.2.22,PHP 5.3.15)设置了标准LAMP堆栈的XDebug(2.2.1)和PHPStorm-IDE(Mac OS X 10.7.5).

/etc/php.ini中

[xdebug]
zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
xdebug.file_link_format="txmt://open?url=file://%f&line=%1"
xdebug.remote_enable = On
xdebug.remote_autostart = "PHPSTORM"
xdebug.var_display_max_data = 1024
xdebug.dump.GET=*
xdebug.dump.POST=*
xdebug.show_local_vars=On
xdebug.dump.SERVER=*
xdebug.dump_globals=On
xdebug.collect_params=4
Run Code Online (Sandbox Code Playgroud)

我遵循了这两个教程,它在99%的项目文件中都有效:

我使用Zend Frameworks MVC架构.我可以在大多数控制器类中停止断点,但在其他一些控制器中,PHPStorm忽略了我的所有断点.

你有什么建议吗?我该如何调试调试器?什么样的配置错误可能导致这种情况?

谢谢你的帮助.

ada*_*vea 8

这几乎必须是phpstorm中错误映射路径的结果.您可以在Settings-> PHP-> Servers中配置路径.我遇到了类似的问题,我所要做的就是在phpstorm中我的代码根的映射中设置服务器上的正确绝对路径(xdebug正在运行).例如c:\ my\code\lives\here\on\my\dev\box =>/myserver/my/code/lives/here/on/my/actual/server.

这是一个更完整的解决方案,以及一般调试XDebug的一些提示:

1)将远程日志文件添加到xdebug设置:xdebug.remote_log = /path/to/logs/xdebug.log

2)重启apache

3)尾巴日志(我假设你可以在OSX中执行此操作)tail -f /path/to/logs/xdebug.log

- 下次尝试调试页面时,通过跟踪日志内容,您可能会看到明显错误的内容.如果是这样,那就做你需要做的事.如果没有,让我们仍然认为这是一个错误的路径并继续尝试解决这个问题: -

4)设置一个断点,你知道PHPStorm/XDebug会实际停止并让它停在那里.在网络上很多地方,人们报告index.php是最容易让PHPStorm第一次停在断点处的地方.

5)在PHPStorm/XDebug停止进入的文件中,设置和取消设置断点,同时PHPStorm在index.php文件中的断点处停止.您应该在xdebug日志文件中看到如下所示的行:< - breakpoint_set -i 19 -t line -f file:/// myserver/my/code/lives/here/on/my/actual/server/file. php -n 159 - >

6)查看文件是否确实存在于XDebug寻找的位置,例如tail /myserver/my/code/lives/here/on/my/actual/server/file.php

7)如果文件实际上并不存在,请调整PHPStorm设置中的路径映射,直到PHPStorm告诉XDebug查看实际存在的文件.例如,如果XDebug已经说过file =/mysrver/my/code/lives/here/on/my/actual/server/file.php,那么在步骤6中您会注意到该文件在服务器上不存在,然后你可能会意识到"我在路径映射中错误拼写myserver错误",然后在PHPStorm中修复拼写可能会解决问题.

这是一个旧的线程,但希望这将有助于最终的人:)


Bre*_*eiz 6

好的,我遇到了同样的问题并且围绕PHPStorm错误跟踪以及他们的开发论坛进行了挖掘.

事实证明,您需要确保断点不起作用的文件路径与MAC上的路径完全相同(大写/小写).我刚刚从Windows迁移了一个项目,其中包含驱动器上的大写/小写文件夹和文件名,以及require_once指令中的不同情况.

一旦我确定require_once中的路径与磁盘上的大小写匹配,那么我的断点就会再次开始工作!

请参见http://devnet.jetbrains.com/message/5488439


小智 0

这通常意味着控制器未被调用。如果它确实适用于某些控制器(在同一项目内),则仅意味着:代码不会被调用。

因此,向上几步即可看到调用了正确的控制器。(例如,从调度开始,然后潜入直到控制器加载)。

您是否可以远程工作(例如从本地到另一台服务器)。将代码放置到服务器上可能需要一些时间。只需等待几秒钟,然后重试。既然它怎么能在它不知道的点上崩溃呢?

希望这有助于您开始调试它。