如何通过先前不感兴趣的服务器调用“浪费”连接时使用XDebug和vim

时间:2017-10-05 19:35:22

标签: php vim xdebug webdav nextcloud

我正在使用带有how to create an entity inside another in the same form using admin-on-rest?和Xdebug的vim来调试Vdebug plugin的WebDAV服务器。 Nextcloud使用SabreDAV,因此WebDAV服务器是一个PHP脚本。 nextcloud使用的桌面文件同步客户端(nextcloud instance使本地文件夹与nextcloud Web存储保持同步。

我希望在WebDAV文件上传(大概是PUT)请求时调试nextcloud服务器的配额计算问题。但是,如果本地文件发生更改,则owncloud客户端会向服务器发出多个WebDAV请求,其中第一个请求对我来说不重要(可能是PROPFIND或类似的)。只有在这个不感兴趣的请求之后,才会发送上传请求。但是,如果我将vim设置为通过Xdebug(:VdebugStart)侦听传入连接,则第一个无趣的WebDAV请求会建立连接,但我想为以后传入的Xdebug连接建立连接。但是,在自己的客户端使用有趣的WebDAV请求再次调用服务器之前,我还不够快,无法将vim设置为侦听模式。

可能有两种方法可以解决这个问题:

  • 让vim在第一次(无趣的)结束后非常快地听取新的Xdebug连接
  • 让PHP不能从一开始就建立Xdebug连接,但只有在调用与客户端有趣的上传请求相对应的某个代码块时才会这样做。我可以从一开始就插入一些PHP函数xdebug_connect_now_to_client()函数而不是Xdebug连接到vim。

你知道实现其中一个目标的可能性,还是有其他解决方案?

相关的php.ini条目:

zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
; have to set this, because owncloud does not set the
; XDEBUG_START_SESSION=true GET parameter
xdebug.remote_autostart=on
xdebug.idekey=netbeans-xdebug

1 个答案:

答案 0 :(得分:1)

就像您一样,我遇到了使用xdebug和vdebug在NextCloud中调试WebDav请求的问题。

我喜欢上面的LazyOne的建议在断点处进行编码。

我最终要做的是设置

xdebug.remote_log=/tmp/xdebug_remote.log
xdebug.trace_options=1
# Write a trace file per process
xdebug.trace_output_name=trace.%p
# Only trace if we get XDEBUG_TRACE
xdebug.auto_trace=0
xdebug.trace_enable_trigger=1

,并尽可能使用下面的插件仅针对我的请求启用调试。

https://addons.mozilla.org/en-US/firefox/addon/xdebug-helper-for-firefox/

我还发现,启用跟踪功能至少有助于初步了解我需要在代码中查找的位置,这也可能有助于您设置手动断点。再次在这里,您可以使用插件最小化将生成跟踪的请求。

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
pm = static

我也在使用php-fpm设置

NSString.newLine;

因此,没有大量的进程创建跟踪文件和发出请求