远程服务器中的 VSCode PHP Xdebug 忽略断点

问题描述 投票:0回答:1

我正在尝试在远程服务器中调试我的应用程序。

远程服务器是 QNAP NAS,运行 Apache 并安装了 Xdebug。

99-xdebug.ini

[xDebug]
extension = xdebug
xdebug.mode = debug,develop
xdebug.remote_handler = "dbgp"
xdebug.remote_cookie_expire_time = 36000
xdebug.start_with_request=trigger
xdebug.client_host = 192.168.1.29
xdebug.client_port = 9003
xdebug.show_exception_trace=false
xdebug.log = /tmp/xdebug.log
xdebug.log_level=10
xdebug.trigger_value=DavidDebugando
xdebug.idekey=vsc

这是我的launch.json

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Local listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "xdebugSettings": {
        "max_children": 128,
        "max_data": -1,
        "max_depth": 3
      },
    },
    {
      "name": "Remote listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "xdebugSettings": {
        "max_children": 128,
        "max_data": -1,
        "max_depth": 3
      },
      "pathMappings": {
        // "file:///share/ZFS2_DATA/Web/dolibarr-pruebas": "${workspaceFolder}",
        "/share/ZFS2_DATA/Web/dolibarr-pruebas": "${workspaceFolder}"
        },
    },
    {
      "name": "Launch currently open script",
      "type": "php",
      "request": "launch",
      "program": "${file}",
      "cwd": "${fileDirname}",
      "port": 9003,
      "xdebugSettings": {
        "max_children": 128,
        "max_data": -1,
        "max_depth": 3
      }
    }
  ]
}

这是我的/tmp/xdebug.log

[23080] Log opened at 2024-09-17 10:32:54.365243
[23080] [Config] DEBUG: Checking if trigger 'XDEBUG_TRIGGER' is enabled for mode 'debug'
[23080] [Config] DEBUG: The trigger value 'DavidDebugando' matched the shared secret 'DavidDebugando' for mode 'debug'
[23080] [Step Debug] INFO: Connecting to configured address/port: 192.168.1.29:9003.
[23080] [Step Debug] INFO: Connected to debugging client: 192.168.1.29:9003 (through xdebug.client_host/xdebug.client_port). :-)
[23080] [Step Debug] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///share/ZFS2_DATA/Web/dolibarr-pruebas/htdocs/custom/phpinfo.php" language="PHP" xdebug:language_version="7.4.30" protocol_version="1.0" appid="23080" idekey="DavidDebugando"><engine version="3.1.6"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2022 by Derick Rethans]]></copyright></init>

[23080] [Step Debug] <- feature_set -i 1 -n resolved_breakpoints -v 1
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="resolved_breakpoints" success="1"></response>

[23080] [Step Debug] <- feature_set -i 2 -n notify_ok -v 1
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="notify_ok" success="1"></response>

[23080] [Step Debug] <- feature_set -i 3 -n extended_properties -v 1
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="extended_properties" success="1"></response>

[23080] [Step Debug] <- feature_get -i 4 -n breakpoint_include_return_value
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_get" transaction_id="4" feature_name="breakpoint_include_return_value" supported="0"><![CDATA[0]]></response>

[23080] [Step Debug] <- feature_set -i 5 -n max_children -v 128
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="5" feature="max_children" success="1"></response>

[23080] [Step Debug] <- feature_set -i 6 -n max_data -v -1
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="6" feature="max_data" success="1"></response>

[23080] [Step Debug] <- feature_set -i 7 -n max_depth -v 3
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="7" feature="max_depth" success="1"></response>

[23080] [Step Debug] <- breakpoint_set -i 8 -t line -f file:///share/ZFS2_DATA/Web/dolibarr-pruebas/htdocs/custom/phpinfo.php -n 3
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="8" id="230800002" resolved="unresolved"></response>

[23080] [Step Debug] <- run -i 9
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="9" status="stopping" reason="ok"></response>

[23080] [Step Debug] <- stop -i 10
[23080] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="10" status="stopped" reason="ok"></response>

[23080] Log closed at 2024-09-17 10:32:54.415959

当我在本地调试时,

breakpoint_set
之后,我明白了

[1040] [Step Debug] <- run -i 11
[1040] [Step Debug] DEBUG: Checking whether to break on C:\xampp7\htdocs\Dolibarr16.0.3\htdocs\custom\phpinfo.php:3.
[1040] [Step Debug] DEBUG: I: Current location: C:\xampp7\htdocs\Dolibarr16.0.3\htdocs\custom\phpinfo.php:3.
[1040] [Step Debug] DEBUG: I: Matching breakpoint 'C:\xampp7\htdocs\Dolibarr16.0.3\htdocs\custom\phpinfo.php:3' against location 'C:\xampp7\htdocs\Dolibarr16.0.3\htdocs\custom\phpinfo.php:3'.
[1040] [Step Debug] DEBUG: F: File names match (C:\xampp7\htdocs\Dolibarr16.0.3\htdocs\custom\phpinfo.php).
[1040] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="11" status="break" reason="ok"><xdebug:message filename="file:///C:/xampp7/htdocs/Dolibarr16.0.3/htdocs/custom/phpinfo.php" lineno="3"></xdebug:message></response>

但是正如您所看到的,这不会在远程日志中发生。

我不知道为什么会发生这种情况。我的

pathMappings
正确吗?

‘xdebug_info()’输出

Version 3.1.6
Support Xdebug on Patreon, GitHub, or as a business
Enabled Features
(through 'xdebug.mode' setting)
Feature Enabled/Disabled    Docs
Development Helpers ✔ enabled   
Coverage    ✘ disabled  
GC Stats    ✘ disabled  
Profiler    ✘ disabled  
Step Debugger   ✔ enabled   
Tracing ✘ disabled  
Optional Features
Compressed File Support no
Clock Source    clock_gettime
Diagnostic Log
Message Docs
⚠️  [Step Debug] Debug client detached: "dbgpProxy has no IDE connected to it". 
Step Debugging  Docs
Debugger    Detached    
Connected Client    127.0.0.1:9003   
Detached    "dbgpProxy has no IDE connected to it"   
PHP
Build Configuration
Version (Run Time)  7.4.30
Version (Compile Time)  7.4.33
Debug Build no
Thread Safety   disabled
Settings
Configuration File (php.ini) Path   /usr/local/etc/php
Loaded Configuration File   /mnt/HDA_ROOT/.config/php.ini
Scan this dir for additional .ini files /etc/config/php.d
Additional .ini files parsed    /etc/config/php.d/99-xdebug.ini, /etc/config/php.d/ext.ini, /etc/config/php.d/php_ext.ini
Directive   Local Value Master Value    Docs
xdebug.cli_color    0   0   
xdebug.client_discovery_header  no value    no value    
xdebug.client_host  127.0.0.1   127.0.0.1   
xdebug.client_port  9003    9003    
xdebug.cloud_id no value    no value    
xdebug.collect_assignments  Off Off 
xdebug.collect_return   Off Off 
xdebug.connect_timeout_ms   200 200 
xdebug.discover_client_host Off Off 
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.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_output_name gcstats.%p  gcstats.%p  
xdebug.halt_level   0   0   
xdebug.idekey   vsc vsc 
xdebug.log  /tmp/xdebug.log /tmp/xdebug.log 
xdebug.log_level    10  10  
xdebug.max_nesting_level    256 256 
xdebug.max_stack_frames -1  -1  
xdebug.mode debug,develop   debug,develop   
xdebug.output_dir   /tmp    /tmp    
xdebug.profiler_append  Off Off 
xdebug.profiler_output_name cachegrind.out.%p   cachegrind.out.%p   
xdebug.scream   Off Off 
xdebug.show_error_trace Off Off 
xdebug.show_exception_trace Off Off 
xdebug.show_local_vars  Off Off 
xdebug.start_upon_error default default 
xdebug.start_with_request   trigger trigger 
xdebug.trace_format 0   0   
xdebug.trace_options    0   0   
xdebug.trace_output_name    trace.%c    trace.%c    
xdebug.trigger_value    DavidDebugando  DavidDebugando  
xdebug.use_compression  0   0   
xdebug.var_display_max_children 128 128 
xdebug.var_display_max_data 512 512 
xdebug.var_display_max_depth    3   3   

切换到 dbgpProxy 认为这会有所帮助,因为我现在在家办公并使用 Wireguard。

2024-09-18 11:36:16.535 [info] [server] Start new client connection from 198.18.7.15:48472
2024-09-18 11:36:17.049 [info] [proxyinit] [DavidDebugando] Added connection for IDE Key 'DavidDebugando': 198.18.7.15:9003
2024-09-18 11:36:17.049 [info] [server] Closing client connection from 198.18.7.15:48472
2024-09-18 11:36:20.928 [info] [server] Start new server connection from 127.0.0.1:53470
2024-09-18 11:36:20.928 [info] [proxy-client] [DavidDebugando] Found connection for IDE Key 'DavidDebugando': 198.18.7.15:9003
2024-09-18 11:36:20.928 [info] [proxy-client] [DavidDebugando] Connecting to 198.18.7.15:9003
2024-09-18 11:38:32.590 [err ] [proxy-client] [DavidDebugando] IDE not connected: dial tcp 198.18.7.15:9003: connect: connection timed out
2024-09-18 11:38:32.590 [warn] [proxy-client] [DavidDebugando] Removed connection information for 'DavidDebugando': dial tcp 198.18.7.15:9003: connect: connection timed out
2024-09-18 11:38:32.590 [warn] [server] Handler response error: Error reading response: Error reading length: EOF
2024-09-18 11:38:32.590 [info] [server] Closing server connection from 127.0.0.1:53470
2024-09-18 11:40:07.288 [info] [server] Start new server connection from 127.0.0.1:53620
2024-09-18 11:40:07.289 [info] [proxy-client] [DavidDebugando] Could not find IDE connection for IDE Key 'DavidDebugando'
2024-09-18 11:40:07.289 [warn] [server] Handler response error: Error reading response: Error reading length: EOF
2024-09-18 11:40:07.289 [info] [server] Closing server connection from 127.0.0.1:53620

回到办公室进行测试

  • C:\xampp7\htdocs\Dolibarr16.0.3\htdocs\xdebug_test.php
  • /share/ZFS2_DATA/Web/dolibarr-pruebas/htdocs/xdebug_test.php
<?php
$a=1;
$b=3;
$c=$a + $b;
xdebug_break();
echo $c, "\n";

[16879] Log opened at 2024-09-20 06:48:16.731443
[16879] [Config] DEBUG: Checking if trigger 'XDEBUG_TRIGGER' is enabled for mode 'debug'
[16879] [Config] DEBUG: The trigger value 'DavidDebugando' matched the shared secret 'DavidDebugando' for mode 'debug'
[16879] [Step Debug] INFO: Checking remote connect back address.
[16879] [Step Debug] INFO: Checking header 'HTTP_X_FORWARDED_FOR'.
[16879] [Step Debug] INFO: Checking header 'REMOTE_ADDR'.
[16879] [Step Debug] INFO: Client host discovered through HTTP header, connecting to 192.168.1.29:9003.
[16879] [Step Debug] INFO: Connected to debugging client: 192.168.1.29:9003 (from REMOTE_ADDR HTTP header). :-)
[16879] [Step Debug] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///share/ZFS2_DATA/Web/dolibarr-pruebas/htdocs/xdebug_test.php" language="PHP" xdebug:language_version="7.4.30" protocol_version="1.0" appid="16879" idekey="DavidDebugando"><engine version="3.1.6"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2022 by Derick Rethans]]></copyright></init>

[16879] [Step Debug] <- feature_set -i 1 -n resolved_breakpoints -v 1
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="resolved_breakpoints" success="1"></response>

[16879] [Step Debug] <- feature_set -i 2 -n notify_ok -v 1
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="notify_ok" success="1"></response>

[16879] [Step Debug] <- feature_set -i 3 -n extended_properties -v 1
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="extended_properties" success="1"></response>

[16879] [Step Debug] <- feature_get -i 4 -n breakpoint_include_return_value
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_get" transaction_id="4" feature_name="breakpoint_include_return_value" supported="0"><![CDATA[0]]></response>

[16879] [Step Debug] <- feature_set -i 5 -n max_children -v 128
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="5" feature="max_children" success="1"></response>

[16879] [Step Debug] <- feature_set -i 6 -n max_data -v -1
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="6" feature="max_data" success="1"></response>

[16879] [Step Debug] <- feature_set -i 7 -n max_depth -v 3
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="7" feature="max_depth" success="1"></response>

[16879] [Step Debug] <- breakpoint_set -i 8 -t line -f file:///share/ZFS2_DATA/Web/dolibarr-pruebas/htdocs/xdebug_test.php -n 4
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="8" id="168790003" resolved="unresolved"></response>

[16879] [Step Debug] <- run -i 9
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="9" status="stopping" reason="ok"></response>

[16879] [Step Debug] <- stop -i 10
[16879] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="10" status="stopped" reason="ok"></response>

[16879] Log closed at 2024-09-20 06:48:16.774053

检查了这个,因为这个 首先加载opcache,然后加载xdebug,所以应该不是问题。

php visual-studio-code xdebug vscode-debugger
1个回答
0
投票

phpinfo.php
中,我看到了警告“XDEBUG 未加载为 ZEND 扩展”。我一开始忽略了它,因为这只是一个警告而不是错误。

Xdebug 没有在断点处停止,因为我在我的

extension=xdebug.so
中使用
99-xdebug.ini
加载了 Xdebug。

Xdebug 需要作为 Zend 扩展加载,因此正确的加载方法是使用

zend_extension=xdebug.so
。一旦我做出了改变,断点就开始工作了。

感谢@LazyOne

© www.soinside.com 2019 - 2024. All rights reserved.