(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