Visit Mozilla.org

Debugging a XULRunner Application

出典: MDC

XULRunner アプリケーションをデバッグする最も簡単な方法はシステムに問題点を通知させることです。2 種類のコンソールが利用可能であり、必要な情報をそれらに表示させるためのさまざまな設定項目が存在します。

目次

[編集] 設定

以下のように設定するとデバッグがかなり楽になります。

設定は %appname%/defaults/preferences/ ディレクトリ内の .js ファイルで行います。(拡張子が .js であれば)ファイル名は何でもかまいません。ですので、debug.js とするのが最良でしょう。

/* デバッグ用設定 */
pref("browser.dom.window.dump.enabled", true);
pref("javascript.options.showInConsole", true);
pref("javascript.options.strict", true);
pref("nglayout.debug.disable_xul_cache", true);
pref("nglayout.debug.disable_xul_fastload", true);

[編集] コンソール

windows でコンソールを有効にするには -console 引数付きで xulrunner を起動してください。-console は application.ini 引数の後になくてはなりません。例:xulrunner.exe /path/to/application.ini -console

コンソールにテキストを出力するには dump("my text here\n"); のようにしてください。これは pref("browser.dom.window.dump.enabled", true) が有効になっているときのみ機能します。

[編集] JavaScript コンソール

JS コンソールを有効にするには -jsconsole 引数付きで xulrunner を起動してください。この引数は application.ini 引数の後になくてはなりません。 例:xulrunner.exe /path/to/application.ini -jsconsole

デフォルトでは JS コンソールはウェブコンテンツのエラーのみを表示します。クロムの JavaScript のエラーを表示させるには pref("javascript.options.showInConsole", true) をセットする必要があります。

JS エラーログをディスクに保存するには "XRE_CONSOLE_LOG" 環境変数にファイル名のパスを指定してください。例えば export XRE_CONSOLE_LOG=/path/to/logfile または set XRE_CONSOLE_LOG=C:\path\to\logfile

[編集] JS コンソールへのメッセージの出力

JS コンソールにメッセージを出力するには 2 つの方法があります。

  • Components.utils.reportError(str) は(例えば赤い停止アイコンとともに)「エラー」として str を出力します。
  • jsdump(str)(以下のように定義される関数)は吹き出しアイコンとともに「メッセージ」として str を出力します。
function jsdump(str)
{
  Components.classes['@mozilla.org/consoleservice;1']
            .getService(Components.interfaces.nsIConsoleService)
            .logStringMessage(str);
}

(この話題についての MozillaZine Knowledge Base の記事 も参照)

[編集] Venkman

XULRunner ベースのアプリケーションに Venkman を永久的に付属させる最も簡単な方法は以下のとおりです(XULRunner 1.8.0.1 にてテスト済み)。

  1. Venkman を addons.mozilla.org から入手する(編集時点では v0.9.87)。
  2. パッケージを解凍 (unzip) し、chrome/venkman.jar ファイルを XULRunner ベースアプリアプリケーションの chrome ディレクトリにコピーする
  3. components/venkman-service.js をアプリケーションの components ディレクトリにコピーする
  4. XUL ウィンドウのどれかに <script src="chrome://venkman/content/venkman-overlay.js"/> を追加する
  5. ウィンドウに Venkman を開くための UI を追加する(メニューアイテムやツールバーボタンという形になるだろう)。その UI から start_venkman() を呼び出すようにする。
  6. chrome/chrome.manifest に以下の行を追加する。
content venkman jar:venkman.jar!/content/venkman/
locale venkman en-US jar:venkman.jar!/locale/en-US/venkman/
skin   venkman modern/1.0 jar:venkman.jar!/skin/modern/venkman/

[編集] トラブルシューティング

[編集] x-jsd is not a registered protocol

Venkman で *.js ファイルを開こうとしたときに "x-jsd is not a registered protocol" というメッセージが表示されたら、XULRunner のバイナリと同じディレクトリに .autoreg という名前の空のファイルを作成してください。もし .autoreg がすでに存在しているならば、それを編集して強制的に最終更新時刻を更新してください。XULRunner は新しいコンポーネントファイルに気付くでしょう。

[編集] function toOpenWindowByType is not defined

"function toOpenWindowByType is not defined" というエラーが発生したら、次の関数をご自分のスクリプトに追加するといいでしょう(venkman のオーバレイ内での現象ではないようだ)。

function toOpenWindowByType(inType, uri) {
  var winopts = "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar";
  window.open(uri, "_blank", winopts);
}