Ticket #25786

IME処理のログ出力機能

Open Date: 2011-07-22 22:12 Last Update: 2012-09-06 10:23

Reporter:
Owner:
(None)
Status:
Closed
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

IME関連の調査・原因究明を容易にするために、NVDA のログ出力機能でIME処理(nvdajpime)の情報が得られるようにしてはどうか、という提案を行いました。

Ticket History (3/10 Histories)

2011-07-22 22:12 Updated by: nishimoto
  • New Ticket "IME処理のログ出力機能" created
2011-08-05 18:45 Updated by: nishimoto
Comment

32ビットアプリケーションについては実現できて、64ビットアプリケーションについても技術的な目処が立っています。

今後、リソースの確保や開放に関するロギングを行い、クラッシュの原因を突き止めるための情報を得ることを目指します。

2011-09-30 19:05 Updated by: nishimoto
  • Owner Update from mshinke to (None)
Comment

Windows API の OutputDebugString を使う処理を lp:~nishimotz/nvdajp/releases_2011.2:4231 で導入しました。

DebugView で情報を得ることができます。

http://technet.microsoft.com/ja-jp/sysinternals/bb896647

scons の nvdaHelperDebugFlags オプションを使うデバッグをあわせて検討しています。

2011-12-08 22:24 Updated by: nishimoto
Comment

2012.1j に向けてIMEサポートの実装を見直す際に検討します。

2012-03-12 12:12 Updated by: nishimoto
Comment

現在は nvdaHelper/{nvdajpime,nvdajpimeRPC}/nvdajpime.h で DEBUG マクロを書き換えてリコンパイルすれば debugview にログを出せますが、 IME に関するテストを効率化するために、 レジストリの値でデバッグ出力の切り替えを行うことを検討します。

2012-03-23 12:23 Updated by: nishimoto
Comment

現在実装中の nvdajpime 関連の仕様をまとめます:

regedit で以下のキーを作成すると、x64 および x86 のログを OutputDebugString API で出力する。

\HKEY_LOCAL_MACHINE\Software\nvda -> DebugIME64 (REG_DWORD) 1以上の数字でログ出力
\HKEY_LOCAL_MACHINE\Software\nvda -> DebugIME32 (REG_DWORD) 1以上の数字でログ出力

このログは DebugView で表示できる。

http://technet.microsoft.com/ja-jp/sysinternals/bb896647

レジストリは Windows xp sp3 および Windows 7 sp1 x64 の両方で共通。 (Wow6432Node を使う必要はない)

補足:NVDA + Windows XP + DebugView が不安定になる現象は、IA2 関連のエラーメッセージが大量に出力されるためである。

下記で抑止できることを確認した。

--- nvdaHelper/remote/IA2Support.cpp    2011-10-25 12:35:26 +0000
+++ nvdaHelper/remote/IA2Support.cpp    2012-03-23 03:10:34 +0000
@@ -78,7 +78,7 @@
                return FALSE;
        }
        if((res=CoRegisterClassObject(IAccessible2ProxyIID,ia2ClassObjPunk,CLSCTX_INPROC_SERVER,REGC
LS_MULTIPLEUSE,(LPDWORD)&IA2RegCooky))!=S_OK) {
-               LOG_DEBUGWARNING(L"Error registering class object, code "<<res);
+               LOG_DEBUG(L"Error registering class object, code "<<res);
                ia2ClassObjPunk->Release();
                CoFreeLibrary(IA2DllHandle);
                IA2DllHandle=0;
2012-04-12 10:23 Updated by: nishimoto
Comment

Windows 8 CP x86 jp + NVDA 2012.1j-beta2 の環境では DebugView の挙動が不安定ですが Trace Spy for Windows 7 を使うとうまくログが表示できます。

http://tracespy.codeplex.com/

2012-04-13 13:53 Updated by: nishimoto
Comment

上記コメントの Trace Spy ですが Windows XP sp3 でも動きました。

DebugView よりも動作が軽い印象です。デバッグがしやすくなって助かります。

2012-04-20 22:13 Updated by: nishimoto
  • Ticket Close date is changed to 2012-04-20 22:13
  • Status Update from Open to Closed
2012-09-06 10:23 Updated by: nishimoto
Comment

デバッグ出力を制御するレジストリのキーを nvda から nvdajp に変更します。

\HKEY_CURRENT_USER\Software\nvdajp -> DebugIME32 REG_DWORD
\HKEY_CURRENT_USER\Software\nvdajp -> DebugIME64 REG_DWORD

lp:nvdajp 4332

ちなみに本家は以下のようにレジストリを使っています。(Windows 7 x64)

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\nvda]
"startMenuFolder"="NVDA"
"startOnLogonScreen"=dword:00000001

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login