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

时间:2013-08-19 14:00:59

标签: magento zend-framework xdebug 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

我遵循了这两个教程,它在99%的项目文件中起作用:

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

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

感谢您的帮助。

5 个答案:

答案 0 :(得分:8)

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

这是一个更完整的解决方案,以及一般调试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中修复拼写可能会解决问题。

这是一个旧线程,但希望这最终会帮助某人:)

答案 1 :(得分:6)

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

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

一旦我确定require_once中的路径与磁盘上的情况相符,那么我的断点就会再次开始工作!

请参阅此处http://devnet.jetbrains.com/message/5488439

答案 2 :(得分:0)

这通常意味着不调用控制器。 如果它适用于某些控制器(在同一个项目中),它只是意味着:代码不会被调用。

因此,请稍微查看正确的控制器。 (例如从发送然后深入到控制器加载)。

您是否有可能远程工作(例如从本地服务器到另一台服务器)。代码放在服务器上之前可能需要一点时间。只需等待几秒钟,然后再试一次。既然它怎么能打破它不知道的一点?

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

答案 3 :(得分:0)

这种情况发生在我身上好几次。通常调试器的配置是原因。您必须在“运行>编辑配置”下正确设置调试服务器的路径映射。

答案 4 :(得分:0)

不在断点处停留的可能原因:

  1. IDE拒绝来自远程服务器的调试连接请求。电话图标必须为绿色(运行 - >开始侦听PHP调试连接)以避免这种情况。
  2. 所有断点都被静音。关闭断点。
  3. 未选中特定断点的暂停复选框。在运行 - >中逐个检查它们查看断点。勾选意味着"暂停执行"而不是"暂停断点",正如人们所想。 (我使用的PHPStorm的当前版本似乎是错误的,如果我检查暂停复选框,那么它还没有生效。我必须单击另一个断点,然后单击返回按顺序到"提交"选中复选框。)
  4. 如果要调试从浏览器调用的脚本,则浏览器应设置名为XDEBUG_SESSION的cookie,其值为idekey。您可以通过以下方式扩展网址来启动它:http://192.168.99.100/?XDEBUG_SESSION_START=PHPStorm。请注意cookie的到期时间仅为一小时。有一些有用的浏览器加载项可以简化处理调试器cookie的过程。有关详情,请参阅https://xdebug.org/docs/remote#starting
  5. 单个断点不是已启用。在运行 - >中逐个检查它们查看断点
  6. 单个断点有一些条件无法满足。在运行 - >中检查断点的条件设置查看断点
  7. 远程服务器和IDE之间存在一些映射问题。在IDE中设置断点时,它会发送远程服务器,执行应该停止在F文件的第N行。本地文件与远程服务器上的文件之间存在映射。映射在IDE中的以下位置定义:

    • 偏好设置 - >的路径映射字段中语言与框架 - > PHP 页面
    • 首选项上的
    • - >语言与框架 - > PHP - >服务器页面

    如果这些映射不正确,例如本地 F1.php 偶然映射到远程 F2.php ,那么您可能会遇到问题。如果在本地文件 F1.php 中的#N行设置断点,则仅当执行到达文件 F2.php的行#N时,服务器才会停止执行(而不是 F1.php )。如果这是问题,那么如果您打开运行 - >,您仍然可以调试代码。在PHP脚本的第一行打破标志。请注意开发操作系统的目录和文件名与远程服务器的目录和文件名的区分大小写!

  8. 由于某些网络设置问题,IDE未从远程服务器接收调试连接请求。检查首选项 - >语言与框架 - > PHP - >调试页面IDE是否正在侦听XDebug的端口9000,检查它是否可以接受外部连接,等等。
  9. 远程服务器的XDEBUG相关设置不正确。我在php.ini
  10. 中使用以下设置

    xdebug.default_enable = 1
    xdebug.remote_enable = 1
    xdebug.remote_connect_back = 0
    xdebug.idekey = "PHPStorm"
    xdebug.remote_autostart = 1
    xdebug.remote_host=192.168.1.26
    

    您应该将 remote_host 设置为开发计算机的IP地址,或者如果您的服务器位于 localhost ,则可以省略整行。

    另外,我设置了以下环境变量:

    export PHP_IDE_CONFIG="serverName=halmaiXdebug"
    export XDEBUG_CONFIG="idekey=PHPStorm"
    

    其中 serverName 的值是我在偏好设置 - >上定义的服务器的名称。语言与框架 - > PHP - > IDE中的服务器页面