Xdebug - command is not available

2020-02-12 04:49发布

问题:

I'm debugging remotely my project in PhpStorm. IDE shows 'Connected' for a moment and immediately goes into 'Waiting for incoming connection...'

Below is Xdebug log from this session

I: Connecting to configured address/port: X.x.x.x:9000.
I: Connected to client. :-)
> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///xxx/info.php" language="PHP" protocol_version="1.0" appid="4365" idekey="10594"><engine version="2.2.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATAhttp://xdebug.org]></url><copyright><![CDATA[Copyright (c) 2002-2013 by Derick Rethans]]></copyright></init>

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

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

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

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

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

<- breakpoint_set -i 5 -t line -f file://xxx/info.php -n 3
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5"><error code="5"><message><![CDATA[command is not available]]></message></error></response>
"

According to Xdebug documentation status "stopping" is 'State after completion of code execution. This typically happens at the end of code execution, allowing the IDE to further interact with the debugger engine (for example, to collect performance data, or use other extended commands).'

So my debugger stops before reaching first breakpoint (set on first line).

Could it be a question of server configuration?

回答1:

You should go to php.ini and delete a line like this

extension=php_xdebug-...

How did this line was created.

You put a xdebug's file into PHP extensions path like this

.../php5.X.XX/ext/

Now you may turn on this PHP extension by any _AMP UI tools like WAMP, XAMPP etc.


To prevent this painful misfortune you must put the Xdebug file into

.../php5.X.XX/zend_ext/

It'll make Xdebug hidden from any _AMP tool.

And correct your zend_extension parameter too.

zend_extension = .../php5.X.XX/ext/php_xdebug-...

to

zend_extension = .../php5.X.XX/zend_ext/php_xdebug-...

It's common default path for it.


Please, remember!
With PHPStorm, Eclipse, Zend etc., possibly you should consider to correct two php.ini files.

The first one for your web server. Commonly under Apache folder

...\Apache2.X.XX\bin\

The second one is for the direct PHP-script debugging. It lies in the PHP hosting folder:

...\php\php5.X.XX\


回答2:

In my case, the cause of the "breakpoint_set" / "command is not available" problem was disabled xdebug.extended_info option (it is enabled by default but I disabled it for profiling).
Breakpoints do not work then xdebug.extended_info is disabled.
I have got breakpoints worked after reenabling xdebug.extended_info.



回答3:

I had same problem under windows, with phpstorm, i was googling many time. Eventually, my decision is the:

in php.ini:

xdebug.remote_mode = "jit"

From phpstorm tutorial, JIT - "Just-In-Time" Mode

https://www.jetbrains.com/help/phpstorm/2016.2/configuring-xdebug.html#d43035e303

UPD

No, this option does not helped me actually. But, i resolve my issue in the end:

I use phpstrom for win 7, and i configured the path mapping this way:

d:\serverroot\vhost\www => d:\serverroot\vhost\www

but in my old config i spied such mapping:

d:\serverroot\vhost\www => d:/serverroot/vhost/www

Finally

On windows machines in path mapping in server configuration replace the \ by /



回答4:

I think the only reason why this could happen is that your info.php has a syntax error. In that case, there is no code to execute and the script goes directly to "stopping" upon issue of the "step_into".



回答5:

Zend_Opcache / OPCache can cause this issue as well, if you have it enabled try disabling it.



回答6:

This error can be emitted when the XDebug extension is compiled into a non-debug build of the PHP runtime. The process will not fail (as it shouldn't), but the XDebug extension will stop doing anything for the duration of that process