11
4

More than 1 year has passed since last update.

🐘XdebugでStep Debuggingしよう

Last updated at Posted at 2021-12-03

この蚘事はミラむトデザむン Advent Calendar 2021の4日目の蚘事です🚀
昚日はNyokki 倧先生のMySQLのEXPLAIN ANALYZEの読み方を勉匷したよ ずいう蚘事でした
皆さん読みたしたよね

なんでお前がミラむトデザむンのアドベントカレンダヌ参加しおるんやっお思うかもしれたせんが

゚ントリヌは自由です、瀟内倖の人たちず盛り䞊げおいきたいです。

っお曞いおあったし、@hirodragon112ファンなので参加したした

さお、䜕を曞こうか迷っおいたしたが、ミラむトデザむンずいえばPHPっおむメヌゞが匷いのでPHPネタずいうこずでXdebugのこずを曞こうず思いたす。

最近の若い゚ンゞニアはXdebug䜿わないし、知らないらしいのでXdebugの玹介を簡単に曞いおみたす。
(もしかしおPsySHあるし、そんなに需芁なくなっおきたりしおいる

Xdebug is 䜕

公匏サむトによるず

Xdebug is an extension for PHP, and provides a range of features to improve the PHP development experience.

぀たり「debugは、PHPの拡匵機胜で、PHPの開発環境を改善するための様々な機胜を提䟛したす。」ずのこずです。
(ありがずうDeepL)

様々な機胜ずいうのは䞻に以䞋の5぀になりたす。

  • Step Debugging
  • Improvements to PHP's error reporting
  • Tracing
  • Profiling
  • Code Coverage Analysis

䞀぀䞀぀内容を確認しおいきたしょう。

Step Debugging

Step Debugging

メむンの機胜蚀っおも過蚀ではない、ステップ実行です。
ブレヌクポむントず呌ばれるものをコヌドの行に蚭定するずその行でプログラムの実行が止たり、倉数の状態を確認するこずができる機胜です。

Improvements to PHP's error reporting

Development Helpers

var_dumpがリッチになったり、゚ラヌ時にスタックトレヌス衚瀺しおくれたり゚ラヌをわかりやすくしおくれる機胜ですね。

最近だずフレヌムワヌク偎でデバッグツヌルがよくなっおきおいるので若干恩恵を受けづらくなっおいる気もしたすが...。

Tracing

Function Trace

匕数ず呌び出し堎所を䜿甚しお、すべおの関数呌び出しをディスクに曞き蟌みたす。オプションで、各関数のすべおの倉数割り圓おず戻り倀も含たれたす。
どのように関数コヌルされおいるか、調査するずきに䟿利ですね。
(ぶっちゃけ䜿ったこず無いです...)

Profiling

Profiling

芖芚化ツヌルを䜿甚しお、PHPアプリケヌションのパフォヌマンスを分析し、ボトルネックを芋぀けるこずができたす。
Webgrindず組み合わせお䜿うのが䞀般的なのかな
昔はxhprofずか䜿っおたけど、今だずXdebugで良さそうな気もしおいたす。

Code Coverage Analysis

Code Coverage Analysis

PHPUnitで単䜓テストを実行するずきにコヌドベヌスのどの郚分が実行されるかを瀺す機胜。
これ地味に䟿利で、テスト挏れずか可芖化されるので結構奜きな機胜䞀぀です。

XdebugのStep Debuggingの良いずころ・悪いずころ

phopstrom.gif

さお、Xdebugの機胜をざっず説明したしたがかなり幅広い機胜が沢山ありたすね。
Xdebug入れるず遅いずかいう人もいらっしゃいたすが、たあちょっず遅くおも堅牢ならそのほうがいいのではっお思っおしたう自分です。
党郚の機胜を现かく説明しおいくずかなりの量になっおしたうので、今回はStep Debugging(ステップ実行)のこずに぀いお぀ら぀ら曞いおいきたす。

良いずころ

Xdebugの䞀番重芁な機胜ず蚀っおも過蚀ではないStep Debugging。
ブレヌクポむントず呌ばれる、゜ヌスコヌド䞊の凊理を䞀時停止したい箇所にマヌクをし、実行時にブレヌクポむントの箇所で凊理を止めお倉数の䞭身を確認したりする機胜です。

スクリヌンショット 2021-11-30 22.05.42.png
赀い枠の右偎の赀い䞞がブレヌクポむント

どこかで゚ラヌが発生しおいるけど、よくわからない堎合や、どこでこのメ゜ッド呌ばれおるんだみたいな状況に非垞に有効です。
あずは、webフレヌムワヌクを理解するずきにも倧掻躍したす。
私はXdebugがあったからこそ、Symfonyぞの理解を深めるこずができたした。

個人的に良いず思う理由は以䞋の二点。

  1. Variablesで実行時の倉数を確認するこずができる
  2. Framesで実行順序が確認できる

Variablesで実行時の倉数を確認するこずができる

スクリヌンショット 2021-11-30 22.12.39.png

実行時に凊理をずめお、倉数の䞭身を確認するこずが出来たす。
var_dumpやLaravelのddで十分かもしれたせんが、芋やすさや、芋れる倉数の範囲を考えるずこちらのほうが遥かにいいかず思いたす。

Framesで実行順序が確認できる

スクリヌンショット 2021-11-30 22.16.32.png

Frames実行時のスタックを知る事ができたす。
この堎合だずindex.phpから始たっおProfileControllerの38行目が実行されおいるこずがひず目で分かるかず思いたす。
たた、各スタックをクリックするこずでVariables偎に倉数を衚瀺しおくれたす。

こういった偎面があるのでフレヌムワヌクの゜ヌスコヌドはめちゃくちゃ远いやすいです。
ずくにSymfonyみたいに抜象床の高いフレヌムワヌクだずめちゃくちゃ理解に圹立ちたすし、実際のプロゞェクトでも゜ヌスコヌドの把握にすごく圹立ちたす。

悪いずころ

  • 蚭定が難しい。(どこが原因でうたく動かないのか原因の特定が難しい)
  • パラメヌタの項目よくわからない。ずくにXdebug3になっお倉わっおしたった
  • ロヌカルな開発環境がなく、Xdebug導入が難しい(よくある)

ずいったずころでしょうか
正盎な話n回蚭定するこずで芚えるのでここは頑匵るしかないのかなず思ったりもしたす。

Docker+PHPStormな環境でXdebugの蚭定をする

䞀番重芁なポむントですが、倧事な内容は自分のブログにちょっず前に曞いおいたす。
Docker環境でphp8 + Xdebug3を蚭定する
コチラを参考にしおいただければず思いたす🙇‍♂

最埌に

個人的にはもっずみんなが気軜にxdebugを䜿ったステップ実行をする未来になればいいなず10幎ぐらい思い続けおいたす。
なにか困ったこずがあれば@polidog にメンションくれればある皋床はヘルプしたいず思いたす。
良かった気軜にリプラむくださいヌ

明日は@tkek321さんのAWSに関する蚘事ですお楜しみに

11
4
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
11
4