PhpStorm XDebug 通过 ssh 隧道
Posted
技术标签:
【中文标题】PhpStorm XDebug 通过 ssh 隧道【英文标题】:PhpStorm XDebug through ssh tunnel 【发布时间】:2018-09-02 02:46:08 【问题描述】:我有一个通过 ssh 进行远程部署(Ubuntu Server 16.04)的 phpStorm 项目
为了测试我的 PHP 项目,我通过 ssh 隧道(putty)连接到远程服务器:
其中动态端口转发 D1024 用于浏览器代理 并且远程端口转发 R9000 localhost:9000 应该用于 XDebug
我将 PhpStorm 配置为使用 XDebug:
并启用它来监听 PHP 调试连接:
远程服务器上的 XDebug 似乎已启用:
这是我浏览器中 phpinfo() 的 XDebug 部分
xdebug
xdebug support enabled
Version 2.6.0
IDE Key XDEBUG_ECLIPSE
Supported protocols
DBGp - Common DeBuGger Protocol
Directive Local Value Master Value
xdebug.auto_trace Off Off
xdebug.cli_color 0 0
xdebug.collect_assignments Off Off
xdebug.collect_includes On On
xdebug.collect_params 0 0
xdebug.collect_return Off Off
xdebug.collect_vars Off Off
xdebug.coverage_enable On On
xdebug.default_enable On On
xdebug.dump.COOKIE no value no value
xdebug.dump.ENV no value no value
xdebug.dump.FILES no value no value
xdebug.dump.GET no value no value
xdebug.dump.POST no value no value
xdebug.dump.REQUEST no value no value
xdebug.dump.SERVER no value no value
xdebug.dump.SESSION no value no value
xdebug.dump_globals On On
xdebug.dump_once On On
xdebug.dump_undefined Off Off
xdebug.extended_info On On
xdebug.file_link_format no value no value
xdebug.filename_format no value no value
xdebug.force_display_errors Off Off
xdebug.force_error_reporting 0 0
xdebug.gc_stats_enable Off Off
xdebug.gc_stats_output_dir /tmp /tmp
xdebug.gc_stats_output_name gcstats.%p gcstats.%p
xdebug.halt_level 0 0
xdebug.idekey PHPSTORM PHPSTORM
xdebug.max_nesting_level 256 256
xdebug.max_stack_frames -1 -1
xdebug.overload_var_dump 2 2
xdebug.profiler_aggregate Off Off
xdebug.profiler_append Off Off
xdebug.profiler_enable Off Off
xdebug.profiler_enable_trigger Off Off
xdebug.profiler_enable_trigger_value no value no value
xdebug.profiler_output_dir /tmp /tmp
xdebug.profiler_output_name cachegrind.out.%p cachegrind.out.%p
xdebug.remote_addr_header no value no value
xdebug.remote_autostart On On
xdebug.remote_connect_back Off Off
xdebug.remote_cookie_expire_time 3600 3600
xdebug.remote_enable On On
xdebug.remote_handler dbgp dbgp
xdebug.remote_host 127.0.0.1 127.0.0.1
xdebug.remote_log /var/log/apache2/xdebug.log /var/log/apache2/xdebug.log
xdebug.remote_mode req req
xdebug.remote_port 9000 9000
xdebug.remote_timeout 200 200
xdebug.scream Off Off
xdebug.show_error_trace Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars Off Off
xdebug.show_mem_delta Off Off
xdebug.trace_enable_trigger Off Off
xdebug.trace_enable_trigger_value no value no value
xdebug.trace_format 0 0
xdebug.trace_options 0 0
xdebug.trace_output_dir /tmp /tmp
xdebug.trace_output_name trace.%c trace.%c
xdebug.var_display_max_children 128 128
xdebug.var_display_max_data 512 512
xdebug.var_display_max_depth 3 3
这个是命令行中 php -i 的 xdebug grep:
php -i | grep xdebug
/etc/php/7.1/cli/conf.d/20-xdebug.ini
xdebug
xdebug support => enabled
xdebug.auto_trace => Off => Off
xdebug.cli_color => 0 => 0
xdebug.collect_assignments => Off => Off
xdebug.collect_includes => On => On
xdebug.collect_params => 0 => 0
xdebug.collect_return => Off => Off
xdebug.collect_vars => Off => Off
xdebug.coverage_enable => On => On
xdebug.default_enable => On => On
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.extended_info => On => On
xdebug.file_link_format => no value => no value
xdebug.filename_format => no value => no value
xdebug.force_display_errors => Off => Off
xdebug.force_error_reporting => 0 => 0
xdebug.gc_stats_enable => Off => Off
xdebug.gc_stats_output_dir => /tmp => /tmp
xdebug.gc_stats_output_name => gcstats.%p => gcstats.%p
xdebug.halt_level => 0 => 0
xdebug.idekey => PHPSTORM => PHPSTORM
xdebug.max_nesting_level => 256 => 256
xdebug.max_stack_frames => -1 => -1
xdebug.overload_var_dump => 2 => 2
xdebug.profiler_aggregate => Off => Off
xdebug.profiler_append => Off => Off
xdebug.profiler_enable => Off => Off
xdebug.profiler_enable_trigger => Off => Off
xdebug.profiler_enable_trigger_value => no value => no value
xdebug.profiler_output_dir => /tmp => /tmp
xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
xdebug.remote_addr_header => no value => no value
xdebug.remote_autostart => On => On
xdebug.remote_connect_back => Off => Off
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_host => 127.0.0.1 => 127.0.0.1
xdebug.remote_log => /var/log/apache2/xdebug.log => /var/log/apache2/xdebug.log
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000
xdebug.remote_timeout => 200 => 200
xdebug.scream => Off => Off
xdebug.show_error_trace => Off => Off
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.show_mem_delta => Off => Off
xdebug.trace_enable_trigger => Off => Off
xdebug.trace_enable_trigger_value => no value => no value
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.trace_output_dir => /tmp => /tmp
xdebug.trace_output_name => trace.%c => trace.%c
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3
并且我的浏览器正在发送正确的 cookie,因为从 Xdebug Helper Firefox 扩展中启用了调试:
这是我在 /etc/php/7.1/mods-available/xdebug.ini 中的 XDebug 配置
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=1
xdebug.idekey="PHPSTORM"
这是xdebug.log的内容
Log opened at 2018-03-23 11:39:26
I: Connecting to configured address/port: locahost:9000.
W: Creating socket for 'locahost:9000', getaddrinfo: No such file or directory.
E: Could not connect to client. :-(
Log closed at 2018-03-23 11:39:26
当我执行我的项目时,通过我的浏览器导航它(ssh 隧道)在 PhpStorm 中没有任何反应(即使我在脚本的一开始就设置了断点)
我哪里错了?
也许我在Putty中设置的两个端口转发相互干扰?我该如何解决?
【问题讨论】:
1) 收集 xdebug 日志——它会告诉 xdebug 端发生了什么 2) RTFM——xdebug.remote_connect_back=On
的值 xdebug.remote_host
被忽略并使用自动检测的 IP (REMOTE_ADDR
most可能).. 这在您的设置中根本没有用。
文档? xdebug.remote_log
为什么说locahost
? 1)你有一个错字 - 它应该是localhost
(这就是错误所说的 - 它无法解析locahost
域)2)你发布的xdebug设置清楚地使用127.0.0.1
地址......有你编辑后? 3) 更好地验证你从phpinfo()
输出中得到了什么——xdebug 部分——你最初发布的那个是非常无用的,因为它只显示了最没用的设置的顶部。
1) 那么新的 xdebug 日志有什么要说的呢? 2) 这些设置——它们是从通过浏览器或控制台捕获的phpinfo()
输出中获取的吗?它必须与您尝试调试的方式相同。
什么是“没有新意”?是否显示完全相同的日志?如果是这样 - 您的设置有问题...您的 xdebug 设置现在显示 9001 端口。日志中显示什么端口?您是否设置了 SSH 隧道以使用该 9001 端口?很抱歉..但是混合新旧信息在这里没有帮助(因为它们显示不同的设置)。
【参考方案1】:
putty 隧道配置有错别字,写的是 locahost 而不是 localhost
【讨论】:
以上是关于PhpStorm XDebug 通过 ssh 隧道的主要内容,如果未能解决你的问题,请参考以下文章
在 Docker for Mac 上使用 SSH 隧道进行 Xdebug
[视频教程]利用SSH隧道进行远程腾讯云服务器项目xdebug调试