Firefox OS (b2g) のデバッガの現在

Firefox OS(b2g)はそんなに詳しいわけじゃないんだけど、概要だけ述べると、Firefox for Android と同様に Firefox の Remote Debugger を使うことになる。このリモートデバッグ用のプロトコルは Firefox/Gecko 独自のものなので、Chrome Developer Tools とかは繋げない。 Remote Debugging Firefox OS with Weinre ✩ Mozilla Hacks – the Web developer blog に Weinre を使って Remote Debug する方法が出ている。とりあえず紹介まで。

繋ぎ方はココとか参考にしましょう。Firefox OS の pref.js の変更の仕方は自分で探してください。Firefox OS Simulator も同様に devtools.debugger.remote-enabled;true で、内部のデバッグサーバーが有効になる。ちなみにデバッグサーバーが待ち受ける port 番号には、現在、 devtools.debugger.remote-port の値が使われている(デフォルト値は 6000)。なので、ローカルで手筈を整えた Firefox OS Simulator を起動しておけば、Remote Debugger が普通に繋げたりする。

これだけならハッピーに聞こえるんだけど、そんなに甘くない。

Firefox OS 上で動く Gecko のプロセスは b2g process と content process の二種類。キーボードとか Wifi とか、システムに関わる範囲のものは b2g process で動く。一方、アプリは全部 content process の方で動く。詳しくは Security model - Mozilla | MDN とか読みましょう。

で、現在の Firefox の Remote Debugger は、content process に接続できないので、結果、アプリのデバッグを Remote Debugger で出来ない、というオチ。

たぶん 797627 – Remote Debugging Protocol needs a way to contact B2G subprocesses が解決すれば、以上の手順を踏めばデバッガを接続できるようになると思うし、いずれは Firefox OS 上でデバッグオプションの設定が GUI で可能になると思う。

Firefox OS Simulator 1.0 でも、アプリに対して Remote Debugger を接続するには、 Firefox OS 上で「Setting」-> 「Device information」->「More Information」->「Developer settings/Developer」と開き、

  • 「Disable out-of-process」を有効にする( シングルプロセスで動作させることで先述の bug 797627 の制限を回避)
  • 「Remote debugging」を有効にする( devtools.debugger.remote-enabled;true と同義)

を設定する。

こうすれば、localhost:6000 に対して Remote Debugger を繋げば、アプリのコードもデバッガでデバッグできる。

(よく設定を調べないとダメですね……)