没有用xdebug,PhpStorm和Laravel 3 / mod_rewrite命中的断点

时间:2013-04-22 21:44:18

标签: laravel xdebug phpstorm laravel-3

我非常绝望并且没有想法:

我为Laravel 3项目配置了xdebug和PhpStorm。在Mac OS X Apache上本地运行项目,因此PhpStorm和Web应用程序在同一台机器上运行。配置虚拟主机,以便localhost.lt指向Laravel的公共目录。

php.ini中的相关xdebug条目:

zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
[xdebug]
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.profiler_enable=1
xdebug.remote_log=/var/log/xdebug_remote.log
xdebug.remote_connect_back=1

确认扩展已加载。

设置一个没有任何路径映射的PHP Web应用程序调试/运行配置,因为没有符号链接,Web服务器和PhpStorm上的文件夹完全相同(因为Web服务器在同一台机器上)。

当从IDE通过“Debug”启动时,xdebug_remote.log正确显示我们在应用程序/库中的一个文件中设置的断点:

<- breakpoint_set -i 5 -t line -f
file:///Users/RalfR/src/livetime/application/libraries/LiveTime.php -n 676
->
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="9230016"></response>

但是,当我们单击从LiveTime.php库调用该函数的链接时,不会触发断点。日志显示:

<- stack_get -i 6 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stack_get" transaction_id="6"><stack where="{main}" level="0" type="file" filename="file:///Users/RalfR/src/livetime/public/index.php" lineno="14"></stack></response>

<- run -i 7 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="7" status="stopping" reason="ok"></response>

<- run -i 8
Log closed at 2013-04-22 21:03:57

尽可能多的框架,Laravel使用.htaccess mod_rewrite通过public / index.php来管道所有内容。可能这是因为PhpStorm / xdebug没有捕获application / libraries / LiveTime.php中的断点,因为xdebug似乎从未执行过LiveTime.php脚本吗?

如果是这样,我们如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

您需要设置Path Mappings您不需要为每个文件设置它。为了解决我的问题,我去了IntelliJ(PHPStorm相同)首选项&gt; PHP&gt;服务器..选择我的服务器并设置以下内容(见下面的注释2):

enter image description here

注1:我也可以直接设置路径项目根目录,但由于我对调试Laravel“public”文件夹和我的应用程序以外的任何内容不感兴趣,我只为这两个文件夹设置了路径。在此之后一切都运行良好。

注2:上面显示的图像不是来自上面步骤中提到的“设置”对话框,而是来自“Resovle Path”映射问题“对话框,它为您提供相同的地图映射窗口小部件。修复任一地方的设置都可以。如果您没有要启动的服务器调试设置并且IDE检测到映射问题,则会出现“解决路径映射问题”对话框,此时它还将为您创建服务器设置。

答案 1 :(得分:0)

在我的情况下,“breakpoint_set”/“command is not available”问题的原因已被禁用xdebug.extended_info选项(默认情况下已启用,但我已将其禁用以进行性能分析)。<登记/> 断点不起作用,然后xdebug.extended_info被禁用 重新启用xdebug.extended_info后,我有断点工作。

答案 2 :(得分:0)

对于那些使用Netbeans和Laravel的人,您需要设置&#34; Web Root&#34;作为位于项目中的公共文件夹 - &gt;属性 - &gt;来源。

Edit web root in Netbeans