デバッグメッセージの使用
デバッグメッセージは、問題の診断やMoodle開発者の支援を目的としています。Moodleサイトで問題が発生し、Moodle.orgのフォーラムで助けを求めた場合、問題の原因を特定するために、開発者からデバッグを有効にする(つまり、デバッグメッセージをオンにする)よう求められることがあります。空白の画面や不完全な画面などの問題が発生している場合は、通常、まずデバッグを有効にしてみてください。
デバッグの有効化
デバッグを有効にするには、サイト管理 > 開発 > デバッグに移動します。
デバッグメッセージ
オプションは次のとおりです:
- NONE: デバッグ情報を表示しない(デフォルト)
- MINIMAL: 致命的なエラーのみ表示する
- NORMAL: エラー、警告および注意を表示する
- ALL: すべての妥当なPHPデバッグメッセージを表示する
- DEVELOPER: 開発者のための特別Moodleデバッグメッセージ
注:
- エラーメッセージの記録を残し、管理者が定期的にエラーログを監視することを推奨します。これは、「デバッグメッセージ」(debug)を「NORMAL」に設定し、「デバッグメッセージを表示する」(debugdisplay)をオフ(チェックなし)のままにすることで実現できます。こうすると、エラーメッセージがサーバログに記録されます。
- 本番(公開)サイトで「デバッグメッセージ」を「DEVELOPER」に設定した場合は、取得したデバッグメッセージをコピー&ペーストしてから、DEVELOPERデバッグをオフにすることを推奨します。デバッグメッセージは、サイトの構成に関する手がかりをハッカーに与える可能性があるためです。
デバッグメッセージを表示する
このチェックボックスを選択すると、デバッグメッセージがブラウザに直接表示されます。選択しない場合は、サーバログに保存されます。
送信メールのデバッグ(SMTP)
config.phpファイルを使用して、送信メール(およびSMTPサーバの設定)のデバッグに役立つ「ツール」をさらに有効にできます:
- 送信メールをすべて特定のアドレスにリダイレクトする:
// Divert all outgoing emails to this address to test and debug emailing features
// $CFG->divertallemailsto = 'root@localhost.local'; // NOT FOR PRODUCTION SERVERS!
- CRONデバッグを有効にして、CLIのcron.phpスクリプトを実行する。
// Force developer level debug and add debug info to the output of cron
// $CFG->showcrondebugging = true;
次に、SSH(Windowsの場合はputty.exe)を使用して、次のコマンドを実行します:
you@moodle-server(/var/www/html/moodle)# php admin/cli/cron.php
- 詳細なSMTPデバッグを有効にし、システムのerror_logに出力する(コードハック):
Moodleのディスカッションフォーラムで提案されているとおり: lib/moodlelib.php L5379を開き、次のように変更します:
if (!empty($CFG->debugsmtp)) {
$mailer->SMTPDebug = 1; // 0 - no debug ... 4 - low level full debug
$mailer->Debugoutput = "error_log";
}
SMTPDebugパラメータおよびDebugoutputパラメータの詳細をご覧ください。 mailcatcher (https://mailcatcher.me/) を設定します。
パフォーマンス情報
「パフォーマンス情報」オプションでは、標準テーマ(およびその他の一部のテーマ)のフッタにパフォーマンス情報を含めるかどうかを指定します。パフォーマンス情報には、ページの読み込み時間、ページの生成に使用されたメモリ量、CPU使用率、負荷、レコードキャッシュのヒット/ミス率が含まれます。
config.phpファイルに
define('MDL_PERF', true);
define('MDL_PERFDB', true);
define('MDL_PERFTOLOG', true);
define('MDL_PERFTOFOOT', true);
を追加すると、データベースクエリもカウントされるようになります。(Moodleはデータベース内の設定情報を読み込む前にDBクエリを開始するため、これはconfig.phpに記述する必要があります!)
一般ユーザにパフォーマンス情報を表示しないようにするには、ディスカッション管理者のみにパフォーマンス情報を表示するには?をご覧ください。
言語ストリングの原語を表示する
翻訳および言語カスタマイゼーションに役立ちます。?strings=1を追加する必要がある場合と、&strings=1を追加する必要がある場合があります。詳細は、ウィキペディアの記事クエリ文字列をご覧ください。
SQLコールの発行元を表示する
この設定を有効にすると、データベースサーバに送信されるすべてのSQLに、PHPスタックトレースの全体または一部を含むSQLコメントが追加されます。つまり、何らかの原因(エラーやスロークエリなど)でクエリがデータベースにログ記録された場合に、そのクエリがMoodleのどこから発行されたかを確認できます。
Validatorリンクを表示する
注意してください。警告をお読みください。
ページ情報を表示する
ページフッタに出力されるページ情報を表示します。
テンプレート情報を表示する
レンダリングに使用されたテンプレートを、ページのHTML内にコメントとして表示します。設定を変更した後、変更を反映するにはキャッシュを削除する必要があります。
ページのHTMLソースでのテンプレートの表示例:
<!-- template(PHP): core/pix_icon_fontawesome -->
<i class="icon fa fa-window-close fa-fw " aria-hidden="true"></i>
<!-- /template(PHP): core/pix_icon_fontawesome -->
追加されたコメントは一部のスクリプトに干渉する可能性があり、コア機能が動作しなくなることさえある点に注意してください!
SQLクエリのデバッグ
config.phpファイルに次のdboptionsのいずれかを追加(有効に)すると、さまざまな種類のSQLクエリがmdl_log_queriesテーブルに記録されます:
- logall - すべてのクエリを記録します。開発者にのみ適しており、サーバに高い負荷がかかるため、本番環境では推奨されません。
- logslow - 指定した秒数より長くかかるクエリを記録します(浮動小数点数の値も使用できます)。
- logerrors - エラーになったすべてのクエリを記録します。
完全なサンプル:
$CFG->dboptions = array (
//'logall' => true,
'logslow' => 5,
'logerrors' => true,
);
ただし、データベースサーバを管理している場合は、おそらくデータベースにスロークエリをデータベースログに記録するオプションがあります。利用できる場合は、そのほうがおそらく技術的に優れた解決策です。
管理画面にアクセスできない場合の対処法
エラーのため、デバッグを有効にするための管理画面にすらアクセスできない場合は、デバッグ設定を手動で設定できます。
URLを直接入力する
デバッグ設定は、サーバ上のURLhttp://.../admin/settings.php?section=debuggingにあります。そこにたどり着くまでに経由するページ(サイトホームなど)が機能しない場合でも、このURLは機能することがあります。そのため、このURLを直接入力してみる価値があります。
config.phpの場合
config.phpでは、セクション7の行のコメントを解除する(行頭の//を削除する)ことで、すべてのユーザまたは特定のユーザのみに対してデバッグを有効にできます:
//=========================================================================
// 7. SETTINGS FOR DEVELOPMENT SERVERS - not intended for production use!!!
//=========================================================================
//
// Force a debugging mode regardless the settings in the site administration
// @error_reporting(E_ALL | E_STRICT); // NOT FOR PRODUCTION SERVERS!
// @ini_set('display_errors', '1'); // NOT FOR PRODUCTION SERVERS!
// $CFG->debug = (E_ALL | E_STRICT); // === DEBUG_DEVELOPER - NOT FOR PRODUCTION SERVERS!
// $CFG->debugdisplay = 1; // NOT FOR PRODUCTION SERVERS!
//
// You can specify a comma separated list of user ids that that always see
// debug messages, this overrides the debug flag in $CFG->debug and $CFG->debugdisplay
// for these users only.
// $CFG->debugusers = '2';
問題の診断が終わったら、忘れずにこれらの行を再びコメントアウトしてください(行頭に//を再度挿入します)。
注1:configデータベーステーブルを直接変更しようとしないでください。値はMUCにキャッシュされているため、機能しません。
注2:config.phpに上記の設定がない場合(約30行の簡略版のconfig.phpの場合)は、詳細がすべて記載された「config-dist.php」ファイルを探してください。現在のconfig.phpファイルにある設定内容を完全版の設定ファイルに移し、そのファイルの名前を「config.php」に変更することをお勧めします。
関連項目
- 開発者で、debugging()ステートメントの使用方法に関する情報を探している場合は、使用方法のドキュメントについてはlib/weblib.phpを、DEBUG_*フラグがどのPHPエラーレベルに対応するかの定義についてはlib/setuplib.phpを参照してください。
- 開発者は、XDEBUG(Apacheサーバにモジュールとしてインストールします)を使用して、XDEBUGクライアントアプリケーションでコードをステップごとにさらに詳しく調べることもできます。このクライアントアプリケーションは、おそらくお気に入りのIDEの一部です。例:NetBeans、phpStormまたは...