205

XDebug 提供了配置指令xdebug.profiler_enable_trigger,允许在通过 HTTP 调用脚本时通过传递 GET 或 POST 参数“XDEBUG_PROFILE”来激活分析。如果您不想对所有脚本进行分析,但只针对少数特殊情况而不总是更改 PHP 配置,这将非常方便。

有没有办法为命令行 PHP 程序实现相同的行为?我试图将其XDEBUG_PROFILE作为命令行参数传递,但它不起作用。

一般来说,分析命令行 PHP 运行良好,但我希望具有与浏览器和 HTTP 服务器相同的每次调用灵活性。

4

10 回答 10

267

-d您可以使用以下标志传递 INI 设置: php -d xdebug.profiler_enable=On script.php.

于 2010-02-18T13:12:53.517 回答
49

我通过以下方式在 Ubuntu/Netbeans 上工作:

  • 将 xdebug 配置行从 /etc/php5/apache2/php.ini 文件复制到 /etc/php5/cli/php.ini
  • 使用调试会话的名称设置环境变量(您可以从开始调试时 netbeans 启动的页面的 url 中的查询字符串中获取此变量)命令是:export XDEBUG_CONFIG="idekey=netbeans-xdebug"

然后它只是一个在netbeans中开始调试并在命令行中执行“php myscript.php”的情况。

于 2011-08-17T11:07:55.170 回答
35

在远程网络服务器上使用 PhpStorm 我使用以下命令:

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

其中server_name代表 PhpStorm 项目配置中的服务器名称

于 2013-11-21T11:51:42.307 回答
25

Xdebug 远程调试页面所述,还可以通过XDEBUG_CONFIG包含“profile_enable=1”指令的环境变量启用分析:

XDEBUG_CONFIG="profiler_enable=1" php ...

为了方便使用,上面的命令行可以写成别名:

alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'

别名可以添加到您的 shell 的(交互式)启动脚本之一,例如~/.bash_aliases~/.bashrc(根据您的系统而定)。

于 2013-08-28T00:46:51.587 回答
12

在 VM 上开发时使其与 Netbeans 一起工作的类似但不同的过程。

需要传入远程启用标志、自动启动标志、ide 标志和远程主机的名称。

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
于 2014-07-01T16:47:48.447 回答
4

我创建了一个 shell 脚本来处理客户端调试。

脚本名称:phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

我放置了这个脚本/usr/bin并赋予它执行权限。

该脚本接受传递给 phpdebug 的参数并使用 xdebug 参数调用 php,并将传递给 shell 脚本的参数附加到末尾,即 $* 。

于 2015-07-16T16:11:05.137 回答
2

在使用 WAMP 的 PhpStorm 7 中,我通过将我已经工作的 xdebug 设置从 C:\wamp\bin\apache\apache2.2.22\bin\php.ini 复制到 C:\wamp\bin\php\ 的 xdebug 部分来实现此功能phpX.YZ\php.ini。然后我像这样运行我的脚本:

php -d xdebug.idekey=PHPSTORM script.php

这甚至可以用于调试 laravel artisan 脚本

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
于 2014-07-25T02:34:20.207 回答
1

对于 Xdebug 3

XDEBUG_MODE 现在,使用环境变量可以很容易地为单个脚本启用 Xdebug :

XDEBUG_MODE=profile php script_to_be_profiled.php
于 2021-04-13T08:05:00.570 回答
1

来自 Jetbrains 的文档

使用 PHP 命令行开关启动脚本进行调试 设置一个环境变量,告诉 XDebug 连接到 IDE:

视窗/MacOS/Linux

export XDEBUG_CONFIG="idekey=123"  

这里 idekey 应该有一个随机值。

使用以下命令行选项启动 PHP:

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

您可以在 Vagrant 中使用 10.0.2.2 而不是 127.0.0.1 (请参阅相关的 SO 问题)。

于 2019-02-01T05:33:56.253 回答
0

欢迎来到 xdebug 3!

就是现在:

xdebug.mode=profile

所以:

php -d xdebug.mode=profile script.php
于 2021-06-26T09:05:31.653 回答