他の人のコードに飛び込むには多くのトリックがあります。 var_dump()を使用できます。この場合、同じスクリプトを何度も実行する必要があります。 デバッガーを構成できますが、探しているものに関係のない多くの関数を入力(ステップイン)する必要があり、重要な呼び出しを逃す(ステップオーバー)場合は、最初からやり直す必要があります。 最新のIDEは静的コード分析の優れた手段を提供しますが、そのサポートがあると、実行時に何が起こるかを理解するのが困難になる場合があります。
長い間、 xdebugのトレース機能に魅了されていましたが、マルチメガバイトのログで何かを手動で追跡することは完全に非現実的で、* .xtファイルのわかりやすいGUIは見つかりませんでした。 そのため、私は自分のビジュアライザーを書くことにしました。
たぶん私は見た目が悪く、自分の自転車で時間を無駄にしていた。 xdebugトレース用の優れたGUIを知っている場合、これ以上読むことはできません。コメントにリンクを残すことを忘れないでください。 GUIをWebプロジェクトとしてphpで作成しました。 理想的には、これはPHPStorm、Eclipse、または別のIDEのプラグインであるべきですが、私はそれをマスターしていなかったでしょう。 ソースへのリンクをすぐに共有します: github.com/vtk13/xdebug-trace-viewer GUIはリソースを大量に消費するため、オンラインデモは提供されていません。 ライブで試してみたい場合は、サーバーにインストールする必要があります。
ここでは、Joomlaの例に関するコースから学べることを説明します。 xdebugが何であり、xdebugのトレースがプロファイリングとどのように異なるかを既に知っていると仮定します 。 それ以外の場合、なぜ同様のGUIが必要なのですか? iniパラメータの推奨値は次のとおりです。
- xdebug.auto_trace = "0"-トレースファイルでフォルダーが乱雑にならないように、連続するすべてのスクリプトのトレースをオフにする価値があると思います。
- xdebug.trace_enable_trigger = "1"-このオプションでは、GETパラメーターXDEBUG_TRACE = 1を使用して、関心のあるリクエストのみをトレースできます。
- xdebug.trace_output_dir = "..."-希望どおり
- xdebug.collect_assignments = "0"-"1"の場合、xdebugにはセグメンテーション違反があります。
- xdebug.trace_format = "1"は、CSV形式でトレースファイルを作成するためにxdebugに設定する必要がある唯一のパラメーターです。
- xdebug.collect_params = "3"-詳細については、パラメーター値をログに書き込むことをお勧めします。 GUIがトレースファイルに対応していない場合、最初にxdebug.var_display_max_data、xdebug.var_display_max_depth、xdebug.var_display_max_childrenを減らし、これが役に立たない場合は、xdebug.collect_params = "0"を設定する必要があります。 私の経験では、GUIは数十メガバイトのトレースファイルを処理できます。
そこで、新しい記事を作成し、Joomlaで記事がどのように機能するかを知りたいJoomlaの拡張機能を作成したとしましょう。 まず、トレースファイルを取得します。 joomla管理パネルで、記事作成フォームのアクションに&XDEBUG_TRACE = 1を追加します。
xdebug.trace_output_dirに記事を作成した後、* .xtファイルを取得する必要があります。このファイルは、GUIのメインページにも表示されます。
記事の作成を分析したら、おそらくmysql関数で調査を開始する価値があります。 必要なトレースファイルを選択し、実行された関数の名前で「mysql」を探します。
この例では、結果にはmysqli_query()関数呼び出しで2つの場所があります:mysqli.php:123およびmysqli.php:382。 各呼び出しは、スクリプトの実行中に何度も実行できますが、この場合、実行された行に関する情報のみが表示されます。 呼び出しの1つ(mysqli.phpファイルの123行目)は、接続時に1回だけ実行され、興味の対象ではないとすぐに言わなければなりません。 しかし、2番目の検索結果-「mysqli.php:382 mysqli_query()」-はさらに興味深いものです。
検索結果のリンク「mysqli.php:382」を使用して、ソースコードの表示に進むことができます。
ソースコードでは、実行された行が強調表示されます。 実行されたすべての行が強調表示されるわけではないことは言うに値します。 Xdebugはトレースへの関数呼び出しのみを書き込むため、たとえば変数の割り当てを含む文字列はトレースファイルに存在しないため、GUIで強調表示されません。
完成した各行には、行番号をクリックしてアクセスできる小さなメニューが添付されます。
この例では、mysqli_query()関数のすべての呼び出しに興味があります。この関数については、382行目のメニューの[すべての呼び出しを表示]リンクをクリックする必要があります。 mysqli_query関数へのすべての呼び出しのリストには、INSERT要求で2つの呼び出しがあります。
記事を作成するための2つのINSERTだけでは悪くありません。最悪の場合、プラグインは内部APIが見つからない場合、データベースに記事を直接作成できます。 しかし、絶望するには早すぎます。 INSERTの行のリンク#11191を使用して、この呼び出しのスタックトレースを開くことができます(リンク内の番号は特に重要ではありません。これは* .txファイルからの関数呼び出しのIDです)。
結果のスタックトレースには、ContentModelArticle-> save()の呼び出しが含まれます。 このクラスを拡張機能で使用することは可能ですか?これはまったく別の話です。 それにもかかわらず、これはすでに良い手がかりです。