SSブログ

PHPってデバッグでブレークとかステップ実行できたんだ。 [プログラミング]

以前、VSCodeとXdebugを使ってステップ実行をしたり、ブレークを張ったりしてデバッグできていたことを確認しました。そこそこ手こずったけれど、問題なく変数の中身とかを見ることができたと思います。

メンテしているPHPのシステムの環境が古くて、VSCodeの範囲外だったのですが、使っていたEclipseでもXdebugを使ってブレークを張ったりできました。なんだよー、使えるならはよ言ってくれないとな~。

Eclipseをファイルがツリー表示にできて、ソースを文字コード対応してGrep検索ができるくらいにしか使っていなかったよ。Tabを使っているとインデントが崩れるしいいことないと思っていたけどそうでもないかな。というかTabの表示だけでもしっかりしてくれればまともになるんだけどな…。明らかに害になっているので。

細かいところは事前に用意されていたので、Eclipseの設定いかんだったのですが、まぁそこそこ使える感じではありました。いちから設定するのは少々しんどいかもなぁ。下記などの設定を見てやってください。

https://qiita.com/twinblack/items/2b112441e0753cd5e6c2
https://rensrv.com/wp/xdebug/install-xdebug-on-eclipse/

自分のところでなかなか動かなかったので、ちょっと参考にしてみました。

というかPHPのEclipseってあったんだとちょっと感心した。GPGPUの時にmakeファイルを使っていたので、C/C++用のEclipse使っていたんだけど、そこそこ楽できましたね。やっぱりGUIからパソコンに入った人なので、IDEがあると安心する。まぁviとコマンドラインとかでもいいんだけど、デバッグとかはGUIでやりたいよね。


変数の中身はボックスに指定してあげないといけないと思いきや、ソースの上の変数にマウスを乗せると、ポップアップしてくるのでたくさんのデータじゃなければそれでOK。ゴロゴロたくさん配列が出てくるような奴は、改めて変数名をコピペして変数用のペインで見ればいいのでしょう。




それまではprint_r()やvar_dump()の嵐で後から消すのも面倒だったのですが、PHPの罠にかかっていたのを書いておいた方がいいかなと思ったので書いておきます。

$test_array
という配列の中身を見ようとして、単純に
print_r($test_array);

とすればよかったのですが、

他の出力とくっつくのが嫌だったので
print_r($test_array . "\n");

としていたのでした。

これだと"\n"の文字列に引きずられて、文字列型にキャストされて、配列の中身が出てきません。実際出るのはArray\nという文字列になってしまいます。さらにその場だけでキャストが終わるのではなく、後を引きずって$test_arrayが"Array"という文字列になってしまうという罠がありました。なんかよくわからん仕様ですが、PHPはそういうものらしいのです。正直意味わかんないです。他の言語を使っていてにわかに信じがたいことであったりしました。

PHPは言語的にバグの元や罠になる言語仕様が盛り沢山なので、使うことになった人は言語仕様と合わせて事前に調べておいた方がいいですよね。配列の添字というかkey,valueのkeyのキャストとかもかなりやばい感じではあります。変数のスコープとキャストに関してはバグを招く仕様になっているので、今後も使われるであろうPHPには気をつけた方がいいですね。


できればvar_dump、print_r、echoなどは使わなければそれに越したことはない。のでGUIなデバッガは動いてしまえばお手軽なので積極的に使いましょう、ということで。他の言語でprintfデバッグ的なことやってるのあんまりないですし。個人的には少しやったりはするかもしれないですが…。

タグ:PHP
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0