63
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

必要な時にのみxdebugをオン

Last updated at Posted at 2017-05-18

Xdebugはパフォーマンスにインパクトを与えます。本来、Xdebugが必要なのはテストカバレッジやプロファイル取得、トレースなどを行うデバック実行の時のみです。この記事では必要な時にのみXdebugをオンにして、普段はオフにする方法を紹介します。Composer と単体テストを含むコマンドラインスクリプトをはるかに高速に実行できます。

Xdebugをオフ

普段はオフにします。php --iniでphp.ini(またはxdebug.ini)の場所を調べコメントアウト。

php.ini
;zend_extension = "xdebug.so"

コンソールで実行

php -dzend_extension=xdebug.so

xdebug付きで実行するときはこのようにxdebugでを読み込んで実行します。しかし実際にはテストカバレッジで後述するようにcomposerコマンドにすると実行も便利です、プロジェクトで必要なコマンドとして記録できます。

テストカバレッジ

カバレッジの計測はXdebugよりPhpdbgが、Phpdbgよりpcovが高速です。

pcov

pcovインストール

pecl install pcov

詳しくはpcov installを参照。

テストカバレッジを取るときのcomposerコマンドをcomposer.jsonに追記。pcovとxdebugでの実行を併記することで異なる環境でカバレッジ取得方法が選べます。

scriptsに記述

{
    "scripts" :{
        "pcov": ["php -d pcov.enabled=1 ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage --coverage-clover=coverage.xml"],
        "coverage": ["php -dzend_extension=xdebug.so ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage --coverage-clover=coverage.xml"],
    }
}

実行はcomposerコマンドで行います。

pcovの場合

composer pcov

xdebugの場合

composer coverage

PhpStorm

PhpStormのオンデマンドモードを有効にするための設定を行います。このモードでは、グローバルPHPインストールの Xdebug を無効にし、コマンドラインスクリプトをデバッグしているとき、またはコードカバレッジレポートが必要な場合にのみ、オンデマンドで自動的にXDebugを有効にします。

PhpStormでデバッガーを使ってブレイクやステップトレースにするためにxdebug.soを読み込む設定にします。

Language & Frameworks > ... > PHP > CLI Interpreter > "..." でCLI Interpreter画面を表示してDebugger extensionに xdebug.so (必要ならフルパスで)を入力します。

スクリーンショット 2020-09-05 11.28.42.png

Debuggerにバージョン番号が出れば認識されています。

63
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
63
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?