如何为命令行 PHP 脚本触发 XDebug 分析器?

发布于 2024-08-21 14:56:52 字数 316 浏览 10 评论 0原文

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

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

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

XDebug offers the configuration directive xdebug.profiler_enable_trigger that allows to activate profiling by passing the GET or POST parameter "XDEBUG_PROFILE" when calling a script via HTTP. This is handy if you don't want profiling for ALL of your scripts but only for a few special cases without always changing your PHP configuration.

Is there a way to achieve the same behavior for command line PHP programs? I tried to pass the XDEBUG_PROFILE as a command line argument but it didn't work.

In general, profiling command line PHP works well, but I'd like to have the same per-call-flexibility as with a browser and HTTP server.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

酒解孤独 2024-08-28 14:56:52

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

You can pass INI settings with the -d flag: php -d xdebug.profiler_enable=On script.php.

云胡 2024-08-28 14:56:52

我通过以下方式在 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”在命令行中。

I got this working on Ubuntu/Netbeans by:

  • copying the xdebug config lines from the /etc/php5/apache2/php.ini file into /etc/php5/cli/php.ini
  • setting an environment variable with the name of the debug session (you can get this from the query string in the url of the page netbeans launches when you start debugging) the command is: export XDEBUG_CONFIG="idekey=netbeans-xdebug"

Then it's simply a case of starting debugging in netbeans and doing "php myscript.php" at the command line.

在远程网络服务器上使用 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 项目配置中服务器的名称

with PhpStorm on remote webserver i use this command:

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

where server_name stands for name of the server in PhpStorm project conifuguration

故事灯 2024-08-28 14:56:52

Xdebug 远程调试页面所述,还可以通过 XDEBUG_CONFIG 通过包含“profile_enable=1”指令来设置环境变量:

XDEBUG_CONFIG="profiler_enable=1" php ...

为了便于使用,可以将上述命令行编写为别名:

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

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

As described on the Xdebug Remote Debugging page, profiling can also be enabled via the XDEBUG_CONFIG environment variable by inluding a "profile_enable=1" directive:

XDEBUG_CONFIG="profiler_enable=1" php ...

For ease of use, the above command line can be written as an alias:

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

The alias can be added to one of your shell's (interactive) startup scripts, such as ~/.bash_aliases or ~/.bashrc (as appropriate to your system).

錯遇了你 2024-08-28 14:56:52

在虚拟机上进行开发时使其与 Netbeans 一起使用的过程类似但不同。

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

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

Similar, but different process for getting it to work with Netbeans while developing on a VM.

Need to pass in the remote enabled flag, the auto start flag, the ide flag, and the name of your remote host.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
旧时模样 2024-08-28 14:56:52

对于 Xdebug 3

现在,使用 XDEBUG_MODE 环境可以轻松地为单个脚本启用 Xdebug变量

XDEBUG_MODE=profile php script_to_be_profiled.php

For Xdebug 3

Now enabling Xdebug for a single script would easily be accomplished using the XDEBUG_MODE environment variable:

XDEBUG_MODE=profile php script_to_be_profiled.php
随心而道 2024-08-28 14:56:52

我创建了一个 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 脚本的参数附加到末尾,$* 位于末尾。

I created a shell script to handle client debugging.

script name: phpdebug

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

I placed this script in /usr/bin and gave it execute permissions.

The script takes the arguments passed into phpdebug and calls php with the xdebug arguments and appends the arguments passed into the shell script, the $* on the end.

小红帽 2024-08-28 14:56:52

在使用 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

In PhpStorm 7 using WAMP I got this to work by copying my already working xdebug settings from C:\wamp\bin\apache\apache2.2.22\bin\php.ini to the xdebug section of C:\wamp\bin\php\phpX.Y.Z\php.ini. Then I ran my script like so:

php -d xdebug.idekey=PHPSTORM script.php

This even worked for debugging laravel artisan scripts

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
北座城市 2024-08-28 14:56:52

来自 Jetbrains 的文档

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

Windows / 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 问题)。

Documentation from Jetbrains

To start the script with debugging using PHP command line switches
Set an environment variable that would tell XDebug to connect to IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Here idekey should have a random value.

Launch PHP with the following command-line options:

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

You may use 10.0.2.2 instead of 127.0.0.1 with Vagrant (see related SO question).

明明#如月 2024-08-28 14:56:52

我需要将以下内容添加到我的 php.ini 中:

xdebug.mode=debug

https://xdebug .org/docs/step_debug#configure

以及我的 .zshrc

export XDEBUG_SESSION=1

https://xdebug.org/docs/step_debug#activate-debugger-cmd

I needed to add the following to my php.ini:

xdebug.mode=debug

https://xdebug.org/docs/step_debug#configure

And the following to my .zshrc

export XDEBUG_SESSION=1

https://xdebug.org/docs/step_debug#activate-debugger-cmd

¢蛋碎的人ぎ生 2024-08-28 14:56:52

欢迎来到 xdebug 3!

现在是:

xdebug.mode=profile

因此:

php -d xdebug.mode=profile script.php

Welcome to xdebug 3!

It is now:

xdebug.mode=profile

therefore:

php -d xdebug.mode=profile script.php
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文