VC6を使用した通信用のライブラリ(ATLを使用したDLL)を
動作確認用に作成したVBのアプリにて動かしていますが、
現在下記のような症状で困っています。
症状:
・通信ポートのオープン/クローズを何千(何万など)回も
繰り返すとOSがブルーバックになって落ちてしまう。
・関係しているかどうかわからないが、タスクマネージャ
ーのカーネルメモリが4k〜8k程度の単位で増えていく。
上記が発生している原因を調べたいのですが、どの様に
調べてみた物か途方にくれています。
通信しなくても発生している様ですので、通信のプログ
ラムとはおそらく無関係ではないかと思っています。
おそらくメモリ系だろうと踏んで、new/deleteで動的に
メモリを確保していた所は、配列で固定にしたりしてみ
ましたが一向になおる気配がありません。
申し訳ありませんが、原因を調べる方法などあるようで
したらアドバイスを頂けると助かります。
備考:
・オープンはCreateFile/GetCommState/SetCommState/
SetCommTimeoutsを実行。(他の内部処理はあります)
・CreateFileはOVERLAPPEDを指定。
・クローズは、PurgeComm/CloseHandleを実行。
(他の内部処理はあります)
・各メソッド実行後、処理結果を内部的に設定。
(エラーコード:long型と、エラー内容:BSTR型)
・開発環境 OS:WinXP-SP2 言語:VC6-SP6(ATL)、VB6-SP6(アプリ)
以上、よろしくお願いします。
ッモリリークと、その箇所(APIや自作関数)の特定をしたいので
あれば・・・
http://www.compuware.co.jp/products/devpartner/index.html
DevPartner Studio Professional Edition 7.2
を使われたらいいと思います。
評価版もありますし、まずはお試しあれ・・・
以上。
岡田さん、ありがとうございます。
さっそくダウンロードして試してみます。
使いこなせるかは疑問ですが ^^;
さっそく使用してみました。
結果は・・・、全然わかりません。 ^^;
多少長文になってしまいます。申し訳ありません。
動作確認用のアプリを終了する際に多少問題が発生して
いるようですが、発生回数も1回ですし、サイズも数バイ
トのようです。1秒で4kBもカーネルメモリが増える現在
の状況とは関係ないようです。
何が原因となっているのか色々自分なりに調べてみまし
たが、ポートをオープンするとメモリが増えているよう
です。実行するとカーネルメモリが数回に1回程度の
割合で4kB増えます。
どなたか、似たような症状になった方いないでしょうか。
アドバイス等あるようでしたら、お願いします。
参考にに問題のポートオープン用関数を記載します。
以上、よろしくお願いします。
BOOL hoge::xf_port_open()
{
BOOL blRtn = TRUE;
blRtn = xp_port_open(); //この行のコメントすると正常
//コメント中 if ( blRtn != FALSE )
//コメント中 {
//コメント中 blRtn = xp_port_setting();
//コメント中 }
return blRtn;
}
BOOL hoge::xp_port_open()
{
if ( m_hComm != INVALID_HANDLE_VALUE ) return FALSE;
m_hComm = CreateFile( "COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if ( m_hComm == INVALID_HANDLE_VALUE ) return FALSE;
return TRUE;
}
お騒がせしましたが、解決しました。
原因は、USB-シリアル変換器のドライバーでした。
COM1で同じソフトを動作させたところ正常に動作しました。
道理で、何度見直しても直らないはずです。
お騒がせして、申し訳ありませんでした。
解決されたのはいいのですが・・・
その『危ない』USB−シリアル変換アダプタは、どこのメーカー
の型式は何の商品なのでしょうか・・・
私も数社のものを使っていますが、そのような現象に陥ったことが
ないので・・・
以上。
いかに Windows とはいえ、
一アプリケーションから、ブルーバックを出して OS ごと落とすのは至難。
その時点でハードやドライバの確認をまずするべき。
岡田 之仁さん、ツールの紹介助かりました。役立ってます。
その『危ない』USB−シリアル変換アダプタはどこのだ?
心配になってしまうじゃないか! という事ですね?
すみません、自社製品です。(おぃおぃ)
一般の方がUSB-シリアル変換器として入手するのは無理だと
思います。
使用しているICは、IOさんのRSAQ2などで使用されている物と
同じ物ですが、簡単に調べた限りではRSAQ2の最新ドライバで
は発生していないようです。ドライバはメーカーから購入した
物なのですが、古くてバグがあるのかもしれません。
マトメさん、言われている事ごもっともです。
ですが、実は私がATLを使用してDLL作るの初めてなんです。
それで、自分のミスかと思い調査中という事です。
自分に自信があれば、すぐドライバを疑ったのですが・・・。
でわ
ツイート | ![]() |