1

我正在使用带有Vdebug 插件和 Xdebug 的 vim 来调试nextcloud 实例的 WebDAV 服务器。Nextcloud 使用 SabreDAV,因此 WebDAV 服务器是一个 PHP 脚本。nextcloud 使用的桌面文件同步客户端(owncloud)将本地文件夹与 nextcloud 网络存储保持同步。

PUT我想根据 WebDAV 文件上传(大概)请求调试 nextcloud 服务器的配额计算问题。但是,如果本地文件发生更改,owncloud 客户端会向服务器发出多个 WebDAV 请求,其中第一个请求对我来说不重要(大概是一个PROPFIND或类似的)。只有在这个无趣的请求之后,才会发送上传请求。但是,如果我将 vim 设置为通过 Xdebug ( :VdebugStart) 侦听传入连接,则第一个无意义的 WebDAV 请求会建立连接,但我想为以后传入的 Xdebug 连接建立连接。但是,在 owncloud 客户端使用有趣的 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
4

1 回答 1

1

和你一样,我在 NextCloud 中使用 xdebug 和 vdebug 调试 WebDav 请求时遇到了这个问题。

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

我最终做的是设置

xdebug.remote_autostart=0 

并尽可能使用下面的插件为我的请求启用调试。

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

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

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

我正在使用 php-fpm 我也设置了

; 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

这样就没有大量进程创建跟踪文件和发出请求

于 2019-01-21T17:17:02.570 回答