Windows版のIMEのコードのログをとる方法 (TSF版)

以前、IMMのハンドリングコードのログをとる方法について解説しましたが、Mozilla 18からは、TSFのハンドリングコードのログもとれるようになりますので、ここでは、それについて解説します。

TSFは今現在も実装されてはいますが、デフォルト設定では無効になっています。これは、互換性の問題やパフォーマンスの問題が未だに解決できていないためです。TSFを有効にするには、about:configで、intl.enable_tsf_supporttrueに変更し、Firefox等を再起動します。

TSFのログを取る際は、Firefox等を起動する前に、環境変数を二つ、設定する必要があります。まずはファイルのパスを、NSPR_LOG_FILEに指定します。Windowsのパスの形式で問題ありません。そして、モジュール指定を、NSPR_LOG_MODULESに行いますが、現在、三つのモードが用意されています。ひとつめは、nsTextStoreWidgets:1です。この場合、TSFとの通信で、どのインターフェースメソッドが呼ばれたのか、そしてどのような値が返されたのかが記録されます。また、nsTextStoreクラスの生成や破棄等も記録されます。二つ目は、nsTextStoreWidgets:2です。この場合、ひとつめのログに加えて、何らかのエラーが発生した場合、そのエラーも記録されます。最後はデバッグ用の、nsTextStoreWidgets:4です。これは、上記二つのログに加えて、全ての内部処理のログをとります。

もし、あなたが、TSFを勉強したい場合や、TIPの開発者の場合は、nsTextStoreWidgets:1がお勧めです。

もし、Firefox等の動作に不審感を感じて、エラーログを取りたいのであれば、nsTextStoreWidgets:2がお勧めです。エラーに関しては、全ての内部処理のものが記録されるからです。

最後のデバッグ用のnsTextStoreWidgets:4は、本当に詳細なログが記録されるので、バグを実際に修正しようとしている場合や、バグ報告に利用しようとする場合以外には好ましくありません。

もし、IMMの動作ログも同時に記録したい場合は、nsTextStoreWidgets:2,nsIMM32HandlerWidgets:1としてください。この場合、同じファイルに両方のログが記録されます。

最後にひとつ、注意すべきことがあります。現在、未確定文字列がある場合、高い頻度で、TSFにレイアウトが変更された可能性があることを通知しています。これは、スクロール等によって、変換候補ウインドウの位置等がずれてしまわないようにするためですが、これにより、本来読みたいログとは関係の無いログが大量に保存されます。これを回避する場合は、about:configで、intl.tsf.on_layout_change_intervalの数値をとことん大きな値に変更してください。数値の単位はミリ秒です。そうすれば、シンプルなログを取得することができます。