PHP 在 visual studio 代码中调试仅有时有效
PHP debugging in visual studio code only works sometimes
我的 php-在 visual studio 中使用 xdebug 进行调试只是有时有效。有时我只是正常加载浏览器页面(下面的错误日志)。
编辑:
起初我以为这是由于文件的位置,但我注意到它可能发生在任何位置;要么 xdebug 在代码中发现错误而没有在我自己的断点处停止;或者它可以找到所有类型的断点或什么也找不到……现在我认为它与刷新、修改和重新保存文件以及文件中的错误类型有关。如果我能找出导致它的原因,我会回到这个问题上。
在我当前的设置中,我的本地主机 webroot 位于 /home/user/Git/www/projects
,这是 127.0.0.1
指向的位置。但是,我还设置了多个驻留在各自子文件夹中的虚拟主机:/home/user/Git/www/projects/project_name
.
一些我已经看过的东西
在此线程中:Visual Studio Code - Xdebug won't work - 他们建议设置 xdebug.remote_connect_back = 1
,但这并不能解决问题。他们还建议在 launch.json 中设置 localSourceRoot 以指向服务器根目录。但是,简单地添加 "localSourceRoot": "http://127.0.0.1"
或类似 "localSourceRoot": "http://127.0.0.1/project_name"
的内容是行不通的。
日志
/etc/hosts
127.0.0.1 project_names
127.0.0.1 php
127.0.0.1 localhost
::1 localhost
php.ini:
[Xdebug]
zend_extension = xdebug.so
xdebug.remote_enable = on
xdebug.remote_autostart = on
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_mode = req
xdebug.idekey=php-vs
;xdebug.remote_connect_back = 1
launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"log": true,
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
VS 调试控制台:
<- 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' }
-> threadsRequest
{ command: 'threads', type: 'request', seq: 3 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 3,
command: 'threads',
success: true,
body: { threads: [ Thread { id: 1, name: 'Request 1 (9:06:23 PM)' } ] } }
-> setBreakpointsRequest
{ command: 'setBreakpoints',
arguments:
{ source:
{ path: '/home/micke/Git/www/projects/php/trial.php',
name: 'trial.php' },
lines: [ 14 ],
breakpoints: [ { line: 14 } ],
sourceModified: false },
type: 'request',
seq: 4 }
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 4,
command: 'setBreakpoints',
success: true,
body: { breakpoints: [ { verified: true, line: 14 } ] } }
-> 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 }
-> threadsRequest
{ command: 'threads', type: 'request', seq: 8 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 8,
command: 'threads',
success: true,
body: { threads: [ Thread { id: 1, name: 'Request 1 (9:06:23 PM)' } ] } }
<- 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 } }
我终于意识到问题与挂载点有关。 VScode 中的项目是在 挂载 的网络服务器路径上打开的;不是它最初在 apache 中指向的位置。所以断点被认为是添加到另一个文件,因为路径不一样。
你的debug有时会成功,看来你的配置是对的,所以可能是php xdebug的端口问题。当我这样做时它对我很好:
1.use php --ini
以显示 php 配置文件并将 xdebug 端口更改为 9900(或其他数字):
xdebug.remote_port=9900
然后重启你的 php
2.change vscode xdebug 端口到 launch.json 中的相同编号:
"port": 9900
3.enjoy 你的调试
更新到最新版本的 xdebug 并将 xdebug.remote_timeout 设置为更高的值,例如 3000
我的 php-在 visual studio 中使用 xdebug 进行调试只是有时有效。有时我只是正常加载浏览器页面(下面的错误日志)。
编辑: 起初我以为这是由于文件的位置,但我注意到它可能发生在任何位置;要么 xdebug 在代码中发现错误而没有在我自己的断点处停止;或者它可以找到所有类型的断点或什么也找不到……现在我认为它与刷新、修改和重新保存文件以及文件中的错误类型有关。如果我能找出导致它的原因,我会回到这个问题上。
在我当前的设置中,我的本地主机 webroot 位于 /home/user/Git/www/projects
,这是 127.0.0.1
指向的位置。但是,我还设置了多个驻留在各自子文件夹中的虚拟主机:/home/user/Git/www/projects/project_name
.
一些我已经看过的东西
在此线程中:Visual Studio Code - Xdebug won't work - 他们建议设置 xdebug.remote_connect_back = 1
,但这并不能解决问题。他们还建议在 launch.json 中设置 localSourceRoot 以指向服务器根目录。但是,简单地添加 "localSourceRoot": "http://127.0.0.1"
或类似 "localSourceRoot": "http://127.0.0.1/project_name"
的内容是行不通的。
日志
/etc/hosts
127.0.0.1 project_names
127.0.0.1 php
127.0.0.1 localhost
::1 localhost
php.ini:
[Xdebug]
zend_extension = xdebug.so
xdebug.remote_enable = on
xdebug.remote_autostart = on
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_mode = req
xdebug.idekey=php-vs
;xdebug.remote_connect_back = 1
launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"log": true,
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
VS 调试控制台:
<- 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' }
-> threadsRequest
{ command: 'threads', type: 'request', seq: 3 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 3,
command: 'threads',
success: true,
body: { threads: [ Thread { id: 1, name: 'Request 1 (9:06:23 PM)' } ] } }
-> setBreakpointsRequest
{ command: 'setBreakpoints',
arguments:
{ source:
{ path: '/home/micke/Git/www/projects/php/trial.php',
name: 'trial.php' },
lines: [ 14 ],
breakpoints: [ { line: 14 } ],
sourceModified: false },
type: 'request',
seq: 4 }
<- setBreakpointsResponse
Response {
seq: 0,
type: 'response',
request_seq: 4,
command: 'setBreakpoints',
success: true,
body: { breakpoints: [ { verified: true, line: 14 } ] } }
-> 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 }
-> threadsRequest
{ command: 'threads', type: 'request', seq: 8 }
<- threadsResponse
Response {
seq: 0,
type: 'response',
request_seq: 8,
command: 'threads',
success: true,
body: { threads: [ Thread { id: 1, name: 'Request 1 (9:06:23 PM)' } ] } }
<- 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 } }
我终于意识到问题与挂载点有关。 VScode 中的项目是在 挂载 的网络服务器路径上打开的;不是它最初在 apache 中指向的位置。所以断点被认为是添加到另一个文件,因为路径不一样。
你的debug有时会成功,看来你的配置是对的,所以可能是php xdebug的端口问题。当我这样做时它对我很好:
1.use php --ini
以显示 php 配置文件并将 xdebug 端口更改为 9900(或其他数字):
xdebug.remote_port=9900
然后重启你的 php
2.change vscode xdebug 端口到 launch.json 中的相同编号:
"port": 9900
3.enjoy 你的调试
更新到最新版本的 xdebug 并将 xdebug.remote_timeout 设置为更高的值,例如 3000