How to debug/ja

From MediaWiki.org

Jump to: navigation, search

このページはMediaWikiをデバッグするための基本的な手引きです。

最初に気付くことの一つは"echo"が一般的に動作しないことです; これは全体的なデザインの一部です。これはデバッギングのためにもっとも簡単な(そしておそらくはベストな)ツールの一つです。しかし他にも方法はあります。

Contents

[edit] デバッギングをセットアップする

最初にする必要があることは"/includes/DefaultSettings.php"ファイルから$wgDebugLogFileグローバル変数をコピーして、デバッグトレース出力を記録するテキストファイルを名付けます:

 /**
 * デバッグログファイルはプライベートなデータを含むことがあるので
 * 使用する場合は公にアクセスできないようにすべきです。
 * ウェブサーバが書き込みできる範囲でPHPが動作するディレクトリに設置します。*/
 $wgDebugLogFile  = 'c:/Program Files/Apache Group/htdocs/mediawiki/debug_log.txt';

DefaultSettings.phpに多くのデバッグ変数が存在しLocalSettings.phpで上書きすることが出来ます。例です:

$wgShowSQLErrors = true;
$wgDebugDumpSql  = true;

プロファイルするために、profiling/debugging定数をLocalSettings.phpファイルにコピーする必要があります。例です:

#
# Profiling / debugging
#

/** 詳細なデバッグ情報を記録します */
$wgProfiling    = true;
/** これよりも長いページのためにプロファイル情報だけを記録する */
$wgProfileLimit = 0.0;
/** ログファイルにプロファイル情報ではないものを記録しない */
$wgProfileOnly  = false;
/** データベースの"profiling"テーブルのプロファイル情報からログの合計 */
$wgProfileToDatabase = false;
/** プロファイリングがonの時にすべtの1リクエストだけプロファイルする */
$wgProfileSampleRate = 1;
/** trueの場合、機能ごとのレポートの代わりに生のコールツリーを出力する */
$wgProfileCallTree = false;
/** 空ではない場合、読み込むプロファイラタイプを指定する */
$wgProfilerType = '';
 
/** UDPプロファイラを設定する */
$wgUDPProfilerHost = '127.0.0.1';
$wgUDPProfilerPort = '3811';
 
/** wfProfileIn/wfProfileOutコールにマッチしないものを検知する */
$wgDebugProfiling = true;
/** すべてのwfProfileIn/wfProfileOut上でデバッグメッセージを出力する */
$wgDebugFunctionEntry = 1;
/** SquidUpdate.phpから多くのデバッグ出力 */
$wgDebugSquid = false;

$wgProfilingの設定は$wgDebugLogFileで基本的なページのタイミングを提供します。もっと高度なページ内のプロファイリングのためには、StartProfiler.phpを修正しなければなりません。

注意: MediaWiki 1.8.2では、$wgProfilerTypeはまったく使用されません。望むプロファイラを有効にするためにStartProfiler.phpを変更しなければならなくなります。詳細についてはそのファイルをご覧下さい。

[edit] 実行をトレースする

一旦上記の変数をセットアップすると、wfDebug()グローバル関数をどこからでも呼び出すことが出来ます。関数は"includes/GlobalFunctions.php"ファイルで見ることが出来ます。

wfDebug("This is just testing the debug tracing stuff\n");

ログファイルで次の内容を見ることになります::

This is just testing the debug tracing stuff

[edit] プロファイリング

高度なプロファイラを読み込むためにStartProfiler.phpを修正します。

それから、次のコードで調査したい関数をボトルネックとしてラップします:

始め:

    $fname = 'class_name_if_applicable::function name'; # 単に表示するため
    wfProfileIn($fname);

終わり:

    wfProfileOut($fname);

ログファイルでプロファイリング情報を見ることになります。 異なるフォーマットを表示するためにLocalSettings.php$wgProfileCallTreeをtrueもしくはfalseに変更して下さい。

[edit] データベースにログインする

データベースへのプロファイリングを記録するために、最初にMediaWikiのデータベースでmaintenance/archives/patch-profiling.sqlファイルをコマンドで使用してプロファイリングテーブルを作成しなければなりません。そしてLocalSettings.phpで$wgProfileToDatabase = trueを設定します。

これでどこかのページを見て下さい(もしくはユーザにさせて下さい)。

[edit] プロファイル情報を見る

MediaWikiルートにあるprofileinfo.phpページはprofilingテーブルからプロファイル情報を出力します。動作させるためには、AdminSettings.phpで$wgEnableProfileInfo = true;を設定して下さい。それから、十分なデータを集めた後で、profileinfo.phpにアクセスしてプロファイルされたコードがどれだけの時間をしてどのくらい呼び出されたのかを見て下さい。