在 VSCode 中使用 Docker 调试 PHP
Debug PHP using Docker in VSCode
看起来一切正常,但是VSCode没有停止调试。我有一个 docker 容器 运行 一个 PHP 图像。
我需要做什么才能在断点处停止?
我在日志中看不到错误,恰恰相反,他们似乎在说断点配置良好,并且代码 运行 正确。
- 容器的IP为172.22.0.2,我的主机的IP为172.22.0.1
- 容器中存在文件xdebugo.so:
/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
- 主机 host.docker.internal 设置正确。
- 我使用以下方法构建图像:
docker build -t phpdebug:5 .
- 文件
/usr/local/etc/php/conf.d/xdebug.ini
存在于 运行 容器中。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/": "${workspaceRoot}/"
}
}
]
}
docker-compose.yml
version: '2'
services:
app:
restart: 'no'
image: phpdebug:5
command: php -S 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- phpdata:/app
environment:
PHP_EXTENSION_XDEBUG: 1
volumes:
phpdata:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/home/element/php/tuto'
/usr/local/etc/php/conf.d/xdebug.ini
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so"
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.idekey=VSCODE
xdebug.remote_autostart=1
xdebug.remote_log=/usr/local/etc/php/xdebug.log
/etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.22.0.2 d484e93eed2a
172.22.0.1 host.docker.internal
Dockerfile:
FROM php
RUN pecl install xdebug
RUN ip -4 route list match 0/0 | awk '{print "host.docker.internal"}' >> /etc/hosts
COPY custom.ini /usr/local/etc/php/conf.d/xdebug.ini
/usr/local/etc/php/xdebug.log
[1] Log opened at 2020-02-25 03:31:45
[1] I: Connecting to configured address/port: host.docker.internal:9000.
[1] I: Connected to client. :-)
[1] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///app/index.php" language="PHP" xdebug:language_version="7.4.3" protocol_version="1.0" appid="1" idekey="VSCODE"><engine version="2.9.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>
[1] <- breakpoint_list -i 1
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="1"></response>
[1] <- breakpoint_list -i 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="2"></response>
[1] <- breakpoint_set -i 3 -t line -f file:///home/element/php/tuto/dies.php -n 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" id="10001"></response>
[1] <- breakpoint_set -i 4 -t line -f file:///home/element/php/tuto/dies.php -n 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" id="10002"></response>
[1] <- breakpoint_set -i 5 -t line -f file:///home/element/php/tuto/result.php -n 4
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="10003"></response>
[1] <- breakpoint_list -i 6
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="6"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10001"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10002"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10003"></breakpoint></response>
[1] <- breakpoint_list -i 7
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="7"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10001"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10002"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10003"></breakpoint></response>
[1] <- breakpoint_set -i 8 -t exception -x *
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="8" id="10004"></response>
[1] <- run -i 9
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="9" status="stopping" reason="ok"></response>
[1] <- stop -i 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="10" status="stopped" reason="ok"></response>
[1] Log closed at 2020-02-25 03:31:45
[1] Log opened at 2020-02-25 03:31:48
[1] I: Connecting to configured address/port: host.docker.internal:9000.
[1] I: Connected to client. :-)
[1] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///app/dies.php" language="PHP" xdebug:language_version="7.4.3" protocol_version="1.0" appid="1" idekey="VSCODE"><engine version="2.9.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>
[1] <- breakpoint_list -i 1
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="1"></response>
[1] <- breakpoint_list -i 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="2"></response>
[1] <- breakpoint_set -i 3 -t line -f file:///home/element/php/tuto/dies.php -n 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" id="10005"></response>
[1] <- breakpoint_set -i 4 -t line -f file:///home/element/php/tuto/dies.php -n 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" id="10006"></response>
[1] <- breakpoint_set -i 5 -t line -f file:///home/element/php/tuto/result.php -n 4
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="10007"></response>
[1] <- breakpoint_list -i 6
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="6"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10005"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10006"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10007"></breakpoint></response>
[1] <- breakpoint_list -i 7
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="7"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10005"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10006"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10007"></breakpoint></response>
[1] <- breakpoint_set -i 8 -t exception -x *
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="8" id="10008"></response>
[1] <- run -i 9
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="9" status="stopping" reason="ok"></response>
[1] <- stop -i 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="10" status="stopped" reason="ok"></response>
[1] Log closed at 2020-02-25 03:31:48
调试控制台 vscode:
<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true
}
new connection 1
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'started', threadId: 1 }
}
<- initializedEvent
InitializedEvent { seq: 0, type: 'event', event: 'initialized' }
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'dies.php', path: '/home/element/php/tuto/dies.php' },
lines: [ 2, 10 ],
breakpoints: [ { line: 2 }, { line: 10 } ],
sourceModified: false
},
type: 'request',
seq: 3
}
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'result.php', path: '/home/element/php/tuto/result.php' },
lines: [ 4 ],
breakpoints: [ { line: 4 } ],
sourceModified: false
},
type: 'request',
seq: 4
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 3,
command: 'setBreakpoints',
success: true,
body: {
breakpoints: [ { verified: true, line: 2 }, { verified: true, line: 10 } ]
}
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 4,
command: 'setBreakpoints',
success: true,
body: { breakpoints: [ { verified: true, line: 4 } ] }
}
-> setFunctionBreakpointsRequest
{
command: 'setFunctionBreakpoints',
arguments: { breakpoints: [] },
type: 'request',
seq: 5
}
<- setFunctionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 5,
command: 'setFunctionBreakpoints',
success: true,
body: { breakpoints: [] }
}
-> setExceptionBreakpointsRequest
{
command: 'setExceptionBreakpoints',
arguments: { filters: [ '*' ] },
type: 'request',
seq: 6
}
<- setExceptionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 6,
command: 'setExceptionBreakpoints',
success: true
}
-> configurationDoneRequest
{ command: 'configurationDone', type: 'request', seq: 7 }
<- configurationDoneResponse
Response {
seq: 0,
type: 'response',
request_seq: 7,
command: 'configurationDone',
success: true
}
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'exited', threadId: 1 }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 8 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 8,
command: 'threads',
success: true,
body: { threads: [] }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 9 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 9,
command: 'threads',
success: true,
body: { threads: [] }
}
new connection 2
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'started', threadId: 2 }
}
<- initializedEvent
InitializedEvent { seq: 0, type: 'event', event: 'initialized' }
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'dies.php', path: '/home/element/php/tuto/dies.php' },
lines: [ 2, 10 ],
breakpoints: [ { line: 2 }, { line: 10 } ],
sourceModified: false
},
type: 'request',
seq: 10
}
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'result.php', path: '/home/element/php/tuto/result.php' },
lines: [ 4 ],
breakpoints: [ { line: 4 } ],
sourceModified: false
},
type: 'request',
seq: 11
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 10,
command: 'setBreakpoints',
success: true,
body: {
breakpoints: [ { verified: true, line: 2 }, { verified: true, line: 10 } ]
}
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 11,
command: 'setBreakpoints',
success: true,
body: { breakpoints: [ { verified: true, line: 4 } ] }
}
-> setFunctionBreakpointsRequest
{
command: 'setFunctionBreakpoints',
arguments: { breakpoints: [] },
type: 'request',
seq: 12
}
<- setFunctionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 12,
command: 'setFunctionBreakpoints',
success: true,
body: { breakpoints: [] }
}
-> setExceptionBreakpointsRequest
{
command: 'setExceptionBreakpoints',
arguments: { filters: [ '*' ] },
type: 'request',
seq: 13
}
<- setExceptionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 13,
command: 'setExceptionBreakpoints',
success: true
}
-> configurationDoneRequest
{ command: 'configurationDone', type: 'request', seq: 14 }
<- configurationDoneResponse
Response {
seq: 0,
type: 'response',
request_seq: 14,
command: 'configurationDone',
success: true
}
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'exited', threadId: 2 }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 15 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 15,
command: 'threads',
success: true,
body: { threads: [] }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 16 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 16,
command: 'threads',
success: true,
body: { threads: [] }
}
我在这里尝试了答案:
Debugging Laravel with VSCode on Docker container using Xdebug as debugger
这里:
日志在<init
数据包中显示:
file:///app/index.php
所有断点配置如下:
file:///home/element/php/tuto/result.php
这表明您所做的路径映射不正确:
"pathMappings": {
"/": "${workspaceRoot}/"
}
在你的情况下,我认为它应该是以下内容,前提是这两个目录都有一个 index.php
和 result.php
文件。如果不是,您需要调整第二个路径,使其成为包含 index.php
和 result.php
文件的路径。
"pathMappings": {
"/app": "/home/element/php/tuto"
}
看起来一切正常,但是VSCode没有停止调试。我有一个 docker 容器 运行 一个 PHP 图像。
我需要做什么才能在断点处停止?
我在日志中看不到错误,恰恰相反,他们似乎在说断点配置良好,并且代码 运行 正确。
- 容器的IP为172.22.0.2,我的主机的IP为172.22.0.1
- 容器中存在文件xdebugo.so:
/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
- 主机 host.docker.internal 设置正确。
- 我使用以下方法构建图像:
docker build -t phpdebug:5 .
- 文件
/usr/local/etc/php/conf.d/xdebug.ini
存在于 运行 容器中。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/": "${workspaceRoot}/"
}
}
]
}
docker-compose.yml
version: '2'
services:
app:
restart: 'no'
image: phpdebug:5
command: php -S 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- phpdata:/app
environment:
PHP_EXTENSION_XDEBUG: 1
volumes:
phpdata:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/home/element/php/tuto'
/usr/local/etc/php/conf.d/xdebug.ini
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so"
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.idekey=VSCODE
xdebug.remote_autostart=1
xdebug.remote_log=/usr/local/etc/php/xdebug.log
/etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.22.0.2 d484e93eed2a
172.22.0.1 host.docker.internal
Dockerfile:
FROM php
RUN pecl install xdebug
RUN ip -4 route list match 0/0 | awk '{print "host.docker.internal"}' >> /etc/hosts
COPY custom.ini /usr/local/etc/php/conf.d/xdebug.ini
/usr/local/etc/php/xdebug.log
[1] Log opened at 2020-02-25 03:31:45
[1] I: Connecting to configured address/port: host.docker.internal:9000.
[1] I: Connected to client. :-)
[1] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///app/index.php" language="PHP" xdebug:language_version="7.4.3" protocol_version="1.0" appid="1" idekey="VSCODE"><engine version="2.9.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>
[1] <- breakpoint_list -i 1
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="1"></response>
[1] <- breakpoint_list -i 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="2"></response>
[1] <- breakpoint_set -i 3 -t line -f file:///home/element/php/tuto/dies.php -n 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" id="10001"></response>
[1] <- breakpoint_set -i 4 -t line -f file:///home/element/php/tuto/dies.php -n 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" id="10002"></response>
[1] <- breakpoint_set -i 5 -t line -f file:///home/element/php/tuto/result.php -n 4
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="10003"></response>
[1] <- breakpoint_list -i 6
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="6"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10001"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10002"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10003"></breakpoint></response>
[1] <- breakpoint_list -i 7
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="7"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10001"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10002"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10003"></breakpoint></response>
[1] <- breakpoint_set -i 8 -t exception -x *
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="8" id="10004"></response>
[1] <- run -i 9
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="9" status="stopping" reason="ok"></response>
[1] <- stop -i 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="10" status="stopped" reason="ok"></response>
[1] Log closed at 2020-02-25 03:31:45
[1] Log opened at 2020-02-25 03:31:48
[1] I: Connecting to configured address/port: host.docker.internal:9000.
[1] I: Connected to client. :-)
[1] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///app/dies.php" language="PHP" xdebug:language_version="7.4.3" protocol_version="1.0" appid="1" idekey="VSCODE"><engine version="2.9.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>
[1] <- breakpoint_list -i 1
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="1"></response>
[1] <- breakpoint_list -i 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="2"></response>
[1] <- breakpoint_set -i 3 -t line -f file:///home/element/php/tuto/dies.php -n 2
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" id="10005"></response>
[1] <- breakpoint_set -i 4 -t line -f file:///home/element/php/tuto/dies.php -n 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" id="10006"></response>
[1] <- breakpoint_set -i 5 -t line -f file:///home/element/php/tuto/result.php -n 4
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="10007"></response>
[1] <- breakpoint_list -i 6
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="6"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10005"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10006"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10007"></breakpoint></response>
[1] <- breakpoint_list -i 7
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="7"><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="2" state="enabled" hit_count="0" hit_value="0" id="10005"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/dies.php" lineno="10" state="enabled" hit_count="0" hit_value="0" id="10006"></breakpoint><breakpoint type="line" filename="file:///home/element/php/tuto/result.php" lineno="4" state="enabled" hit_count="0" hit_value="0" id="10007"></breakpoint></response>
[1] <- breakpoint_set -i 8 -t exception -x *
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="8" id="10008"></response>
[1] <- run -i 9
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="9" status="stopping" reason="ok"></response>
[1] <- stop -i 10
[1] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="10" status="stopped" reason="ok"></response>
[1] Log closed at 2020-02-25 03:31:48
调试控制台 vscode:
<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true
}
new connection 1
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'started', threadId: 1 }
}
<- initializedEvent
InitializedEvent { seq: 0, type: 'event', event: 'initialized' }
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'dies.php', path: '/home/element/php/tuto/dies.php' },
lines: [ 2, 10 ],
breakpoints: [ { line: 2 }, { line: 10 } ],
sourceModified: false
},
type: 'request',
seq: 3
}
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'result.php', path: '/home/element/php/tuto/result.php' },
lines: [ 4 ],
breakpoints: [ { line: 4 } ],
sourceModified: false
},
type: 'request',
seq: 4
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 3,
command: 'setBreakpoints',
success: true,
body: {
breakpoints: [ { verified: true, line: 2 }, { verified: true, line: 10 } ]
}
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 4,
command: 'setBreakpoints',
success: true,
body: { breakpoints: [ { verified: true, line: 4 } ] }
}
-> setFunctionBreakpointsRequest
{
command: 'setFunctionBreakpoints',
arguments: { breakpoints: [] },
type: 'request',
seq: 5
}
<- setFunctionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 5,
command: 'setFunctionBreakpoints',
success: true,
body: { breakpoints: [] }
}
-> setExceptionBreakpointsRequest
{
command: 'setExceptionBreakpoints',
arguments: { filters: [ '*' ] },
type: 'request',
seq: 6
}
<- setExceptionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 6,
command: 'setExceptionBreakpoints',
success: true
}
-> configurationDoneRequest
{ command: 'configurationDone', type: 'request', seq: 7 }
<- configurationDoneResponse
Response {
seq: 0,
type: 'response',
request_seq: 7,
command: 'configurationDone',
success: true
}
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'exited', threadId: 1 }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 8 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 8,
command: 'threads',
success: true,
body: { threads: [] }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 9 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 9,
command: 'threads',
success: true,
body: { threads: [] }
}
new connection 2
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'started', threadId: 2 }
}
<- initializedEvent
InitializedEvent { seq: 0, type: 'event', event: 'initialized' }
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'dies.php', path: '/home/element/php/tuto/dies.php' },
lines: [ 2, 10 ],
breakpoints: [ { line: 2 }, { line: 10 } ],
sourceModified: false
},
type: 'request',
seq: 10
}
-> setBreakpointsRequest
{
command: 'setBreakpoints',
arguments: {
source: { name: 'result.php', path: '/home/element/php/tuto/result.php' },
lines: [ 4 ],
breakpoints: [ { line: 4 } ],
sourceModified: false
},
type: 'request',
seq: 11
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 10,
command: 'setBreakpoints',
success: true,
body: {
breakpoints: [ { verified: true, line: 2 }, { verified: true, line: 10 } ]
}
}
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 11,
command: 'setBreakpoints',
success: true,
body: { breakpoints: [ { verified: true, line: 4 } ] }
}
-> setFunctionBreakpointsRequest
{
command: 'setFunctionBreakpoints',
arguments: { breakpoints: [] },
type: 'request',
seq: 12
}
<- setFunctionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 12,
command: 'setFunctionBreakpoints',
success: true,
body: { breakpoints: [] }
}
-> setExceptionBreakpointsRequest
{
command: 'setExceptionBreakpoints',
arguments: { filters: [ '*' ] },
type: 'request',
seq: 13
}
<- setExceptionBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 13,
command: 'setExceptionBreakpoints',
success: true
}
-> configurationDoneRequest
{ command: 'configurationDone', type: 'request', seq: 14 }
<- configurationDoneResponse
Response {
seq: 0,
type: 'response',
request_seq: 14,
command: 'configurationDone',
success: true
}
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'exited', threadId: 2 }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 15 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 15,
command: 'threads',
success: true,
body: { threads: [] }
}
-> threadsRequest
{ command: 'threads', type: 'request', seq: 16 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 16,
command: 'threads',
success: true,
body: { threads: [] }
}
我在这里尝试了答案:
Debugging Laravel with VSCode on Docker container using Xdebug as debugger
这里:
日志在<init
数据包中显示:
file:///app/index.php
所有断点配置如下:
file:///home/element/php/tuto/result.php
这表明您所做的路径映射不正确:
"pathMappings": {
"/": "${workspaceRoot}/"
}
在你的情况下,我认为它应该是以下内容,前提是这两个目录都有一个 index.php
和 result.php
文件。如果不是,您需要调整第二个路径,使其成为包含 index.php
和 result.php
文件的路径。
"pathMappings": {
"/app": "/home/element/php/tuto"
}