简体   繁体   中英

Xdebug ignores breakpoints in Netbeans for Php project created inside Docker container

When I debug project which is not created inside Docker container, then there is no problem with Xdebug.

But when I debug project created inside Docker container, then Xdebug does not stop on breakpoints - although it is running and it stops on xdebug_break().

My Docker host is Ubuntu 14.04. It is installed as VirtualBox. It uses PHP 5.5.9-1ubuntu4.16 with Xdebug v2.2.3. I have a mounted volume (between Docker host and Docker container) where projects created inside Docker container are stored.

My Docker container inside Ubuntu 14.0.4 is based on CentOS release 6.7 (Final). It uses PHP 5.3.29 with Xdebug v2.1.4 and it has Xdebug configured as follows (inside /etc/php.d/xdebug.ini):

zend_extension=/usr/lib64/php/modules/xdebug.so
;xdebug.remote_autostart = 0
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
;xdebug.remote_host = 127.0.0.1
;xdebug.remote_host = localhost
;xdebug.remote_host = 172.17.42.1
;xdebug.remote_host = 10.0.2.15
;xdebug.remote_host = 10.0.2.2
;xdebug.remote_port = 9001
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = /home/devteam/xdebug/profiler
xdebug.remote_log=/home/devteam/xdebug/xdebug.log
xdebug.profiler_output_name = cachegrind.out.%c
xdebug.show_exception_trace = 1
xdebug.idekey = netbeans-xdebug

I have checked through all, currently displayed as commented out, values for xdebug.remote_port setting. I have tried different ports (9001, 9002) for xdebug.remote_port setting (of course with the same port set inside Netbeans). I also tried changing xdebug.remote_connect_back and xdebug.remote_autostart settings. I have noticed that with these two ones set to zero, xdebug was actually hanging and waiting for connection.

But still I am not able to make Xdebug stopping on breakpoints while debugging projects previously deployed inside Docker container.

I am not sure if I miss anything regarding Netbeans settings or Xdebug settings. I spent many hours trying to find the solution. I was trying to find some relevant information inside xdebug.log - but it does not seem to contain anything significant to me:

...
<- breakpoint_set -i 1567 -t line -s enabled -f file:///var/www/html/test/index.php -n 3
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1567" state="enabled" id="11710015"></response>

<- breakpoint_set -i 1568 -t line -s enabled -f file:///home/pkowalski/clients/deployments/demon-prep/application/bootstrap_http.php -n 7
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1568" state="enabled" id="11710016"></response>

<- run -i 1569
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="1569" status="stopping" reason="ok"></response>

Log closed at 2016-05-20 23:38:11

Log opened at 2016-05-20 23:40:23
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/deployments/demon-prep/application/bootstrap_http.php" language="PHP" protocol_version="1.0" appid="1172" idekey="netbeans-xdebug"><engine version="2.1.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2012 by Derick Rethans]]></copyright></init>

<- feature_set -i 1570 -n show_hidden -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1570" feature="show_hidden" success="1"></response>
...

It seems like it successfully manages to set breakpoints, but I am not sure if the filepath is correct inside xdebug.log. Maybe I need to use manual path mapping inside Netbeans, but I am not sure how to do it and what path should be a server path.

Right now if I start debugging, the page loads. But some time before, there was an error inside the browser saying that connection was reset. Apart from that, a couple of times an error popup was showing up. Some time a popup was saying that there was a communication problem between Netbeans and Xdebug. Other time different message was displayed - that there was a socket connection error. I am not sure why now I do not see these popups.

Any idea what could be the solution for Xdebug ignoring breakpoints in Netbeans for projects created inside Docker container?

Finally I solved the issue on my own.

As I expected, the solution was to set Path Mapping properly in Netbeans.

After analysing xdebug.log again today, I have noticed that the beginning of the log contains interesting information - a value for attribute fileuri of init element:

<init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/deployments/my-project/application/bootstrap_http.php" language="PHP" protocol_version="1.0" appid="139" idekey="netbeans-xdebug"><engine version="2.1.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2012 by Derick Rethans]]></copyright></init>

The way I shared a directory of my Docker host, containing my-project , with Docker container, during run docker subcommand for my Docker container was: docker run ... -v /home/pkowalski/clients/deployments:/mnt/deployment .

So what I did to solve the problem with Netbeans ignoring breakpoints for my-project , was I just set Path Mapping inside Netbeans (Project Properties -> Run Configurtion -> Advanced) as follows:

Server Path: /mnt/deployments/my-project

Project Path: /home/pkowalski/clients/deployments/my-project

Because I have a soft link created inside my Docker container for the mounted directory: ln -s /mnt/deployments /home/devteam/deployments , initially I tried to put /home/devteam/deployments/my-project as a Server Path value, but it did not work.

Apart from that, now it works for me with no xdebug.remote_host set at all and with xdebug.remote_autostart set either to zero or one.

Here is the final working content of my /etc/php.d/xdebug.ini inside Docker container:

zend_extension=/usr/lib64/php/modules/xdebug.so 
xdebug.remote_autostart = 0
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp

My friend, my machine went through a similar problem. My machine already had a conventional installation, and the docker modules were installed. So what I did was unseal the php-xdebug package, it solved for me.

command: sudo apt purge php-xdebug

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM