web-dev-qa-db-ja.com

すべての関数呼び出しを出力する必要があるDrupalは

すべての関数呼び出しを調べる必要がありますDrupalは、ページのロード中に(エラーがなくても)行います。デバッグソフトウェアでこれを実行できると思いますが、次の方法も知りたいです。 xdebugなどなしでこれを行う.

私はこのリンクを見つけました: https://drupal.stackexchange.com/questions/545/how-to-debug-drupal しかし、私はこのコードの例をどこに置くべきかわかりません:

<?php
$bt = debug_backtrace();
foreach ($bt as $key => $value) {
  if ($key == 0) {
    continue;
  }
  unset($bt[$key]['args']);
  unset($bt[$key]['object']);
}
drupal_set_message(str_replace('    ', '&nbsp;&nbsp;&nbsp;&nbsp;', nl2br(htmlentities(print_r($bt, TRUE)))));
?>
3
jjei

他の方法とは対照的に Xdebug を使用することをお勧めします。

Xdebugは簡単にインストールでき、プロファイリングを有効にしてサイト内を移動するだけです。

すべての関数呼び出しがリストされるだけでなく、リクエスト中にそれぞれが呼び出された回数と関数呼び出しの回数もカウントされるため、exactlyがわかりますボトルネックを解決するために探します。

結果は、とりわけ Webgrind (ブラウザベース)または KCacheGrind (KDE/linux)を使用して表示できます。

コードを改ざんしたり、デバッグ文で散らかしたりしないので、これはより効率的です。

4
Alex Weber

1つのページビュー中の関数呼び出しの数は非常に多くなる可能性があります。数はわかりませんが、数千人かな。このデータをすべてログに記録したい場合は、画面に投稿するのではなく、ddモジュールのようなdevel関数のようにファイルに書き込んでください。

すべての関数呼び出しをログに記録する場合は、最後に、drupalページで呼び出される最後の関数を開始します。開始できる最後の関数の1つはdrupal_page_footerです。その関数にdebug_backtraceを追加します。

次に、すべての関数を調べ、それらの関数が呼び出すすべての関数にdebug_backtraceを追加する必要があります。次に、追加したばかりのdebug_backtraceにリストされているすべての新しい関数を実行し、ユーザーまたはコンピューターが窒息するまで上記の手順を繰り返す必要があります。

これを行うことは可能ですが、有用なものを得るには、プロファイルツールが必要になります。これは、すべてを数時間ではなく数秒で行うことができます。これは、コンピュータが優れている点です再帰

1
googletorp

すべての関数呼び出しを印刷する必要がある場合は(たとえば、名前をコンマで区切って)、次のことを試してください。

_print implode(', ', array_column(debug_backtrace(), 'function'));
_

注: array_column() はPHP> = 5.5.0の一部です

0
kenorb