(toppers-users 134) Re: Visual C++ 続き 5  追加

Takayuki WAKABAYASHI takayuki @ ertl.ics.tut.ac.jp
2001年 3月 24日 (土) 21:34:44 JST


豊橋技術科学大学の若林です。

美崎さんから問題のEXEとPDBファイルを頂き、
どこが問題なのかが見えてきました。
遅くなってしまいましたが、詳細を報告します。

---8<---

症状
 ・デバッグ文字列出力ウィンドウが出たまま
   プログラムが固まってしまう

原因
 ・デバイスサポート(COM)の初期化ルーチンのバグ
    初期化時にデバイスサポートのメインルーチン内で
    初期化に失敗した場合、メインスレッドが無限待ち
    のままになってしまう

症状再現までの過程
 1.デバイスサポートが有効になっているカーネルを起動し、
   デバイスサポート初期化後に、プロセスを強制停止させる
    #デバイスマネージャはカーネルが存在すると思い込んで
    #いるために、次に起動されるカーネルにはサービスを
    #提供しない
 2.再度プログラムを実行する
    #デバイスサポートの初期化ルーチンは、マネージャへの
    #アタッチに失敗し、無限待ちのままとなる

修正
 jsp/config/windows/device_com.cpp:207付近
  前	WorkerThread = 0;
  前	CloseHandle(Blocker);

  後	WorkerThread = 0;
  後*	SetEvent(Blocker);
  後	CloseHandle(Blocker);

補足
 マネージャ本体のほうの修正は もうしばらくお待ちください。

---8<---

あとからPDBファイルは実行中プロセスのデバッグに
使えないことを知って愕然としましたが、なんとか
デバッグ情報無しでも問題が追跡できました。
 #Windowsアプリで組込み向けのデバッグ技法が
 #役に立つとは...

美崎さん、ご報告ありがとうございました。

//-------------------------------------------------
//Takayuki WAKABAYASHI (わかばやし たかゆき)
//  mailto: takayuki @ ertl.ics.tut.ac.jp
//-------------------------------------------------
//豊橋技術科学大学 工学研究科
//  組込みリアルタイムシステム研究室
//    Embedded and realtime system laboratory
//      Toyohashi univ. of technology