@Yuta_swift (雄太 杉原)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PHP Xdebugでindex.php以外デバッグができない

解決したいこと

PHP Xdebugでindex.php以外デバッグができない

内容)
PHPを用いてWebアプリを作成しています。
エラーが出た時にXdebugを使ってデバッグしながら作業を進めているのですが、index.php以外デバッグできない状況になりました。
デバッグができないとエラーの原因がわからないので前に進めません。
2週間くらい調べ漁りましたがわからなかったのでご教授お願いします。

発生している問題・エラー

1.デバッグができないrouter.phpでbreakpointを設定しデバッグを試みると、unverified breakpointと表示される

【エラー詳細】
現状、index.phpのrouterでエラーが起きて落ちていると思われます。
index.phpのrouterまではしっかりデバッグができているので良いのですが、肝心のrouter.phpのrouter関数の中をデバッグすることができません。
router.phpのrouter関数の中身がデバッグできるようにするのがゴールです。

個人的には4枚目の写真のunverified breakpointが怪しいと思っています。
デバック可能なindex.phpではでませんが、デバッグ不可能なbrouter.phpは事象が発生します。

【添付写真】
1枚目:index.php(デバッグ可能)
2枚目:router.php(デバッグ不可能)※問題
3枚目:launch.json
4枚目:router.php(デバッグ不可能) unverified breakpoint ※問題 個人的に問題だと思っています

【環境】
MAMP
PHP Version:7.4.21
Xdebug version:3.0.4

index.php(デバッグ可能)
スクリーンショット 2022-04-27 9.22.23.png

router.php(デバッグ不可能)
スクリーンショット 2022-04-27 9.22.37.png

launch.json設定
スクリーンショット 2022-04-27 9.13.01.png

router.php(デバッグ不可能) unverified breakpoint ※問題
スクリーンショット 2022-04-28 7.38.25.png

自分で試したこと

VisualStudiocodeの再インストール
Xdebugの再インストール
xdebugの設定の見直し

0 likes

3Answer

現状、index.phpのrouterでエラーが起きて落ちていると思われます。

どういうエラーで落ちているのですか?
エラーメッセージがあるとアドバイスが集まると思います。

router.phpのrouter関数の中をデバッグすることができません。

index.php 38行目の route() で止めて、関数内に入ってトレースできますか?

xdebugに問題があるというより、router.phpが読み込まれていないように見えますね。

0Like

Comments

  1. @Yuta_swift

    Questioner

    ご回答ありがとうございます!

    失礼しました。
    エラーは起きていません。

    router()でとまりはするのですが、関数内に入ることができません。
    router関数の処理は指定するパスによって表示する画面を変えるという処理なのですが、それ自体は上手くいっています。
    なのでなぜ関数内に入らないかが気になります。
  2. route.phpでは
    namespace lib;
    と定義されています。

    index.phpの
    use function libs\route;

    use function lib\route;
    に変えると変化はありますか?
  3. @Yuta_swift

    Questioner

    use function lib\route;に変更みましたが、デバッグできないことには変わりないです。
    routeメソッドは確実に呼べてますが、router.php内デバックはできない状況です。
  4. lib\route でも libs\route でも状況が変わらないということはこの呼び出している route() が本当に
    php\libs\router.php のものなのかというところから疑わないといけないのかもしれませんね。

    > router()でとまりはするのですが、関数内に入ることができません。

    この「関数内に入ることができません」というのはどういう操作でしょう?

    index.php 38行目の route(); で停止した後、デバッグツールバー?の「↓」をクリックして関数内をステップ実行できないということで大丈夫ですか?
    関数に入れない場合「↓」をクリックした後の挙動はどうなっているでしょう?

'> この「関数内に入ることができません」というのはどういう操作でしょう?
routeメソッド内がトレースできないという意味です。
なのでrouter.phpにbreakpointを置いたとしてもスルーするという現状です(写真に記載)。

'> index.php 38行目の route(); で停止した後、デバッグツールバー?の「↓」をクリックして関数内をステップ実行できないということで大丈夫ですか?
あっています

'> 関数に入れない場合「↓」をクリックした後の挙動はどうなっているでしょう?
下に処理が進んでいきます。
具体的にはrequired_onceに進んでいきます。

0Like

abstruct.mode.phpやauth.phpなど他にもいくつかブレークポイントを設定されているようですが、そちらは停止しますか?
また、良くみると現在設定しているブレークポイのは全て無効(有効の場合赤いマーカーだと思います)に見えます。
もし、以前は問題なかった、あるいは他の場所であれば停止するということであれば一旦すべてのブレークポイントを削除して必要なところにだけ再設定してみてください。

libs/route と lib/route で挙動が変わらないというのは不可解ですが(libs/routeではエラーが発生して例外がキャッチされるはず)、ステップインでも関数に入らず、例外もキャッチされないということなのでもう一つの疑惑として実行位置を正しく認識できていない可能性もありますが、このツリーの中でブレークポイントが機能していたならそこは大丈夫なのでしょう。

ブレークポイントを全て削除しても変化がない場合には、もっと単純な(1ファイル内に関数2つ程度)テストプログラムを書いて、1行づつその行の結果として変数の値が変化しているか(=処理結果とソースの行が一致しているか)、関数内までステップインで入っていけるか等確認するのが良いと思います。

0Like

Comments

  1. @Yuta_swift

    Questioner

    abstruct.mode.phpやauth.phpなど他にもいくつかブレークポイントを設定されているようですが、そちらは停止しますか?
    →停止しません。index.phpのみ停止します。

    libs/route と lib/route で挙動が変わらないというのは不可解ですが
    →投稿している画像が古いものでしたのでlib/routeに関しては自分で修正をすでにしていました。なので挙動が変わりませんでした。

    もっと単純な(1ファイル内に関数2つ程度)テストプログラムを書いて
    →今のファイルをコピーしてapacheの転送をなくして試したところroute.phpもデバックをすることが可能になりました。apacheの設定が悪いのでしょうかね??

Your answer might help someone💌