Debugging PHP in Visual Studio Code - php

I am trying to debug a wamp-based website using VSC. When I start the debugger using the configuration Listen for XDebug, the Debug control panel opens. The Step Over, Step Into and Step Out controls are not active (I assume they become active when the program starts?). I have two breakpoints set up.
This is the launch.json file that VSC created for PHP:
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
This is the XDebug config in php.ini
; XDEBUG Extension
[xdebug]
zend_extension ="c:/wamp64/bin/php/php5.6.31/zend_ext/php_xdebug-2.5.5-5.6-
vc11-x86_64.dll"
xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="c:/wamp64/tmp"
xdebug.show_local_vars=0
I changed these lines as per XDebug extension docs in VSC
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
When I start(submit a form), the code executes, but the VSC debugger doesn't engage, execution doesn't stop at the breakpoints, data is inserted in some tables. Am I missing some configuration so that the debugger does something, stops at the breakpoints? The VSC docs here
https://code.visualstudio.com/docs/editor/debugging
only highlight debugging with Node.js debugger. Appreciate any guidance on this.

I needed to ask for more info through comment section but I did not have enough reputation to do so :)
I suspect the PHP.ini file that you have modified is not the correct one. As you mentioned, you're dealing with WAMP, therefore there must be at least two PHP.ini files:
Command Line Interface (CLI)
Apache.
You should have modified the second one since you're running Apache.
I'm not quite sure about the exact path to those two files. I hope this could help.
How to know which PHP.ini is loaded?
Run phpinfo(); in your script in VSCode. It brings up your PHP configuration info. Look for: Loaded Configuration File.

Related

Visual Studio Code debugger not launching browser window or displaying variables

I'm running a debugging session in Visual Studio Code. I was expecting two things to happen that didn't.
For a browser window to open when I launched 'run and debug'.
To see a list of variables and their values.
First, I downloaded the Xdebug extension.
Next, I set a breakpoint on my php file.
Lastly, I clicked the 'run and debug' button.
I'm hoping someone can offer some advice on where I'm going wrong.
Thanks,
Kyle
Check your ports, I recommend using some that you remember, example: default.
I recommend you install php with brew, since with MAMP, XAMP, etc. there is less information in case of error.
brew tap shivammathur/php
brew install shivammathur/php/php#7.3
This tool gave me a lot of headaches at work, however, on MacOs we have to do a lot of steps.
I recommend that you remember how to install it as it is, because sometimes Visual Studio Code changes the ports when updating.
Xdebugger installation
These three files are the most important to modify (with nano, vim, etc.)
php.ini
Location: /usr/local/etc/php/7.3/php.ini
...
; Local Variables:
; tab-width: 4
; End:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9000
99-xdebug.ini
Location: /usr/local/etc/php/7.3/conf.d/99-xdebug.ini
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so"
xdebug.mode=debug
xdebug.start_with_request = yes
xdebug.remote_autostart = 1
Visual Studio Code
settings.json
Important: xdebug.remote_port, Listen for Xdebug, Launch currently open script are the same port.
{
// 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": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}

Listen for XDebug php in vscode with xampp

Once I performed all the configuration stuff, downliading the .dll, adding it to the ext path in xamp and to the php.ini etc.
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9003
zend_extension="C:\xampp\php\ext\php_xdebug.dll"
After adding both configs in vsCode:
1.- Installing the php debug extension
2.- Run->AddConfiguration->Listen for Xdebug
3.- Run->AddConfiguration->"Launch currently open script"
So both debug modes seem to be possible:
Surprisingly I can make the debug work if I "Launch currently open script".
De default config for the "Launch currently open script" is:
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 0,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env": {
"XDEBUG_MODE": "debug,develop",
"XDEBUG_CONFIG": "client_port=${port}"
},
}
But that did not work until I added runtimeExecutable":"C:\\xampp\\php\\php.exe.
For the case 1.- Listen for Xdebug, that is to debug the whole app without the need of selecting an specific file, I could not make it work. The launch.json is:
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
I tried of course adding the runtimeExecutable":"C:\\xampp\\php\\php.exe, changing the ports, restarting apache and vs code and adding to de vs code settings the Allow Breakpoints Everywhere checkbox.
I am close, because for Launch current script mode works but when I launch vscode with the Listen for Xdebug option, my breakpoints are in place and my page is reloaded for check. Nothing happens and there are no errors in the vscode debug console.
Any idea of what needs to be done for the Listen for Xdebug to work and be able to debug the whole proyect with vscode?
Edit:
I also tried adding this options to my php.ini:
xdebug.mode = debug
xdebug.discover_client_host = 1
xdebug.start_with_request = yes
as recommended here
and the visualStudio php configuration Listen for XDebug 2 (Legacy)
Followed the intructions from the extension docs and I dont find what is wrong.

My Xdebug is not working. Why isn't break points not working?

I have installed Xdebug with VS Code and Flywheel local and I am learning how to make themes. I have put a breakpoint in my index.php file. However, the said breakpoint is not working.
I am not getting any errors in my console. Nothing is happening in VS Code debug terminal when I load my site. It's just all blank. I have also installed PHP Debug extension in VS Code.
However, when I type in debug console anything I get this message - Cannot evaluate code without a connection.
What went wrong here?
My php.ini
[xdebug]
{{#if os.windows}}
zend_extension = php_xdebug.dll
{{else}}
zend_extension = {{extensions.xdebug}}
{{/if}}
xdebug.remote_enable=1
xdebug.remote_connect_back=Off
xdebug.remote_port="9000"
xdebug.profiler_enable=0
xdebug.remote_autostart = 1
xdebug.mode=debug
My 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": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"C:/Users/ajayb/Local Sites/wordpress-theme-1/app/public": "${workspaceRoot}"
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
I have faced the same problem. Local by FlyWheel installs Xdebug 2.7 for PHP 7.3 and XDebug 3.x when using PHP 7.4. If you are using PHP 7.4 modify the php.ini file and replace the xdebug section with the following:
[Xdebug]
; Consider checking php_xdebug.dll file properties to get installed Xdebug version
zend_extension="D:\Programs\xammp\php\ext\php_xdebug.dll"
; Settings for Xdebug 2.x
xdebug.scream = 1
xdebug.remote_enable = 1
xdebug.show_local_vars = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
; Settings for Xdebug 3.x
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_port="9000" ; Default now is 9003
Even if you have XDebug's version 2.x.x, the default configuration is not enough.
You have to use the following for Xdebug v2.x.x:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9000
Yeap, as it was mentioned in a comment the main reason is https://xdebug.org/docs/upgrade_guide
I had the same issue with PHPStorm & Flywheel Local app v6+.
I set PHP 7.4.1 in Local and found in ~/projects/project-name/conf/php/php.ini.hbs next v2 options:
xdebug.remote_enable=1
xdebug.remote_connect_back=Off
xdebug.remote_port="9000"
xdebug.profiler_enable=0
But when I checked var_dump(phpversion('xdebug')); it ouptuted XDebug 3. It worked for me with v3 options:
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.client_port="9003"
xdebug.discover_client_host=0
My problem was that i wasnt changing the php.ini in the right place.
There is a general conf\php folder and there are version specific ones.
Changing php.ini xdebug settings in conf\php solved it.
Also i put the full path in the pathmappings(launch.json) like so:
"pathMappings": {
"C:\\Users\\Test\\Local Sites\\localtest\\app\\public": "${workspaceFolder}",
}

PHP Xdebug debugging stops working in VSCode at first breakpoint

I am using Wamp on Windows 10 Pro 64bit. Firstly, PHP XDebug based debugging works fine on my normal Core PHP application in Visual Studio Code but when I start debugging a PhalconPhp (MVC) based application it stops at the first breakpoint and doesn't proceed, whatever I try - Continue (F5), Step Over (F10) etc. None of the keys or options work.
I have checked all similar issues and solutions - tried changing port from default 9000 to 9001 in php.ini and launch.json, added all extra configurations suggested in various posts although I am not doing remote debugging. Tried to setup a single and multiple breakpoints and also tried keeping them on various lines at start, middle or end of code.
php.ini
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back=1
xdebug.profiler_enable = On
xdebug.profiler_enable_trigger = On
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="R:/Temp"
xdebug.show_local_vars=1
xdebug.remote_port = 9000
xdebug.remote_log=R:\Temp\xdebug.log
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
There are no error messages. The debugger doesn't move an inch and stays stuck at first breakpoint. I can only restart execution in debugger, none of the other operations (Step In, Step Over, Continue...) work. I also have xdebug.log but don't see anything useful in it.
UPDATE: Debugging is working well for all Php programs including Phalcon with VSCode 1.36.1, XDebug 2.6.1, Php 7.2.14 on Windows 10. I think VSCode and XDebugger have some incompatibility issue for newer versions, but not sure.
In Setting->Debug you should uncheck "Break at first line in PHP scripts" item, this setting is for phpstorm but I think that's same for other IDE.
UPDATE
For VS code:
The launch.json file has the setting "stopOnEntry":true. Change this to false to prevent this. The docs for this can be found code.visualstudio.com/docs/python/debugging#_stoponentry
I started using VS Code debuging php (wordpress) recently. When I enable multiple breakpoints, it sometimes stuck like you described. When I enable only one breakpoint at any moment, it seems worked smoothly. Though it is not without hassle, it is better than no solution. I guess that when mutliple threads hit break points, they all try to talk to the xdebug and somehow deaklocked.

Visual Studio Code - Xdebug won't work

In Visual Studio Code (1.9.1) (mac) i have setup the php-debug plugin.
In the debug screen i start 'listen for Xdebug'.
After this i open the index.php on my XAMPP server (local).
But nothing happens.
the blue bar at the bottom of the screen turns orange.
the step over, step into and step out buttons are greyed out.
Also the following error message occurs at the watched variables:
cannot evaluate code without an connection
I try to use breakpoints on the following code:
<?php
$i = 0;
do {
$i++;
if (!($i % 1)) {
echo('<p>$i = ' . $i . '</p>');
}
}
while ($i < 100);
?>
I am using XAMPP and in my php.ini file i use port 9000 for Xdebug.
zend_extension="/usr/local/Cellar/php71-xdebug/2.5.0/xdebug.so"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote.port=9000
I installed Xdebug using homebrew.
Here is my php info:
phpinfo.htm
Xdebug wizard tells me Xdebug is installed correctly.
my launch.json file looks like this:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log": true
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
Would anyone know what i am doing wrong?
After setting the xdebug.remote_connect_back = 1 in the ini file
as n00dl3 suggested debugging most of the time works, but once in a while i get the following
error in the debug console:
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'exited', threadId: 1 } }
I encountered this problem as well, not with the same environment (NGINX server + php-fpm) but the same symptoms. It turned out to be caused by my xdebug configuration.
How I managed to diagnose it : by writing a simple PHP script for test just like OP did :
<?php
xdebug_info();
By browsing to it, I got a bunch of info on my setup, including :
xdebug.client_host => localhost
xdebug.client_port => 9003
whereas my xdebug was listening on port 9900 (default being 9000).
Steps to fix : just add the following lines to your php.ini or xdebug.ini (wherever the rest of your xdebug configuration lies) :
# This should match your xdebug.remote_host
xdebug.client_host=localhost
# This should match your xdebug.remote_port
xdebug.client_port=9900
xdebug.mode=debug
Then rerun a debug session in VScode, add some breakpoints, and re-browse to your script : my VScode window popped up, the execution was paused on the breakpoint and the variables where accessible in the debug pannel just like expected.
EDIT : don't forget to also :
add xdebug.mode=debug to your php.ini
restart webserver and php-fpm services.
It seemed the server root needed to be set
in the launch.json with localSourceRoot like this:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"localSourceRoot": "http://127.0.0.1/public_html/"
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
Now breakpoints are working like they should.
In my case, these two lines were missing from the php.ini file.
xdebug.mode = debug
xdebug.start_with_request = yes
Check xdebug.client_port
in page xdebug_info(); or phpinfo();
Config same port in launch.json of vscode
I just had this problem too.
Somehow, someday, without realizing it, I got version 3 of xdebug installed, and a lot of conf param name changed , see this SO question
So verifying the xdebug version with phpinfo for example can be worth a shot.
I am working with VSCODE devcontainer and I fix with the config below:
My launch.json for VSCODE
{
"version": "0.2.0",
"configurations": [
{
"name": "Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
I use Dockerfile with a RUN below to install xdebug:
RUN pecl install xdebug && docker-php-ext-enable xdebug
I find my xdebug config file in /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
I edit the file as below:
zend_extension=xdebug
[xdebug]
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.idekey=VSCODE
Or you can add it in Dockfile like below:
RUN echo ' \n[xdebug] \n\
xdebug.client_host=host.docker.internal \n\
xdebug.mode=debug \n\
xdebug.start_with_request=yes \n\
xdebug.idekey="VSCODE" \n\
\n' >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
mode This setting controls which Xdebug features are enabled. We’ve set develop to enable development aids, such as getting better error messages, and debug to enable step debugging.
client_host This setting tells Xdebug the IP address or hostname of the machine that is running your text editor or IDE.
start_with_request This setting determines whether a function trace, garbage collection statistics, profiling, or step debugging are activated at the start of a PHP request. Setting it to yes instructs Xdebug to always initiate a debugging session.

Categories