Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动断点在XDebug for PHP中的远程VM上不起作用_Php_Debugging_Phpstorm_Xdebug_Remote Debugging - Fatal编程技术网

手动断点在XDebug for PHP中的远程VM上不起作用

手动断点在XDebug for PHP中的远程VM上不起作用,php,debugging,phpstorm,xdebug,remote-debugging,Php,Debugging,Phpstorm,Xdebug,Remote Debugging,我一直在远程虚拟机上设置XDebug for PHP,使用PHPStorm作为IDE/客户端。我在网站上看到了很多关于这方面的问题,但是没有一个关于这种情况 我在Windows机器上编写代码,PHPStorm会在Linux虚拟机上与我的开发环境自动同步文件。我在端口9001上有一个从那个虚拟机到本地机器的隧道。我正在尝试调试命令行PHP脚本,我已经做到了: xdebug_break()函数可以工作 如果选中“在PHP脚本的第一行中断”,我可以从一开始就逐步完成脚本,但是 手动断点不起作用 我

我一直在远程虚拟机上设置XDebug for PHP,使用PHPStorm作为IDE/客户端。我在网站上看到了很多关于这方面的问题,但是没有一个关于这种情况

我在Windows机器上编写代码,PHPStorm会在Linux虚拟机上与我的开发环境自动同步文件。我在端口9001上有一个从那个虚拟机到本地机器的隧道。我正在尝试调试命令行PHP脚本,我已经做到了:

  • xdebug_break()函数可以工作
  • 如果选中“在PHP脚本的第一行中断”,我可以从一开始就逐步完成脚本,但是
  • 手动断点不起作用
我的IDE和XDebug实例之间的通信似乎很好,因为只要它来自XDebug_break()或脚本的开头(尽管IDE没有突出显示当前行),我就可以单步执行

查看xdebug.remote_日志,我看到断点设置在本地Windows文件上,而不是服务器上的路径上-这似乎是个问题

<- breakpoint_set -i 7 -t line -f file://D:/git/php/php/tests/lookatme.php -n 8
我的xdebug.ini:

xdebug.default_enable=0
xdebug.overload_var_dump=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name="cachegrind.out.%s.%t"
xdebug.remote_enable=On
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
xdebug.remote_port=9001
xdebug.remote_log=/tmp/xdebug.log
脚本使用环境变量运行:

export XDEBUG_CONFIG="idekey=PHPSTORM"
PHPStorm中的路径映射:


谢谢你的任何想法

我认为您需要映射每个文件。它适用于远程服务器。

我认为您需要映射每个文件。它适用于我的远程服务器。

感谢所有人的帮助和指点-最后我发现我的远程计算机上缺少了一个环境变量:

导出PHP\u IDE\u CONFIG=“serverName=RemotePHP”


其中RemotePHP是在设置>PHP>服务器中设置并在调试配置中选择的服务器的名称。大概没有这个,它就不知道如何将传入断点映射到正确的文件。

谢谢大家的帮助和指点-最后我发现我的远程机器上缺少了一个环境变量:

导出PHP\u IDE\u CONFIG=“serverName=RemotePHP”


其中RemotePHP是在设置>PHP>服务器中设置并在调试配置中选择的服务器的名称。大概没有这个,它不知道如何将传入断点映射到正确的文件。

最有可能的路径映射不正确。请显示
设置| PHP |服务器的屏幕截图。
。编辑描述以添加屏幕截图!端口9001打开了吗?是的-端口9001上的通信正常,通过本地机器和VM之间的隧道(通过Putty:R9001->localhost:9001)只是为了100%清楚:请注意,xdebug只使用最终/解析的文件名工作,因此,
/company/mnt/codebase/DEVWEBPHP354/php/
应该是实际的真实路径,其中不包含任何符号链接。最有可能的路径映射不正确。请显示
设置| php |服务器的屏幕截图
。编辑描述以添加屏幕截图!端口9001打开了吗?是的-端口9001上的通信正常,通过本地机器和VM之间的隧道(通过Putty:R9001->localhost:9001)只是为了100%清楚:请注意,xdebug只使用最终/解析的文件名工作,因此,
/company/mnt/codebase/DEVWEBPHP354/php/
应该是实际的实际路径,其中不包含任何符号链接。无需为PhpStorm映射“每个文件”。文件夹的映射将扩展到其中的所有子文件夹和文件。他只有根映射。Xdebug配置有时不符合逻辑。不需要为PhpStorm映射“每个文件”。文件夹的映射将扩展到其中的所有子文件夹和文件。他只有根映射。Xdebug配置有时不符合逻辑。您需要一个真正的mvp。这对我有用。您还可以在/etc/profile.d中添加一个名为anything.sh的文件,并将PHP_IDE_CONFIG=“serverName=RemotePHP”放入其中。这对我有用。您还可以在/etc/profile.d中添加一个名为anything.sh的文件,并将PHP_IDE_CONFIG=“serverName=RemotePHP”放入其中。
export XDEBUG_CONFIG="idekey=PHPSTORM"