ATLで作成したDLLのデバッグに関して

解決


ひでらん  2005-04-08 02:56:18  No: 56935

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(アプリ)

以上、よろしくお願いします。


岡田 之仁  2005-04-08 04:38:59  No: 56936

ッモリリークと、その箇所(APIや自作関数)の特定をしたいので
あれば・・・
http://www.compuware.co.jp/products/devpartner/index.html
DevPartner Studio Professional Edition 7.2
を使われたらいいと思います。
評価版もありますし、まずはお試しあれ・・・

以上。


ひでらん  2005-04-08 16:53:55  No: 56937

岡田さん、ありがとうございます。

さっそくダウンロードして試してみます。
使いこなせるかは疑問ですが ^^;


ひでらん  2005-04-12 22:14:47  No: 56938

さっそく使用してみました。
結果は・・・、全然わかりません。 ^^;

多少長文になってしまいます。申し訳ありません。

動作確認用のアプリを終了する際に多少問題が発生して
いるようですが、発生回数も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;
}


ひでらん  2005-04-13 02:17:08  No: 56939

お騒がせしましたが、解決しました。

原因は、USB-シリアル変換器のドライバーでした。
COM1で同じソフトを動作させたところ正常に動作しました。
道理で、何度見直しても直らないはずです。

お騒がせして、申し訳ありませんでした。


岡田 之仁  2005-04-13 03:34:52  No: 56940

解決されたのはいいのですが・・・

その『危ない』USB−シリアル変換アダプタは、どこのメーカー
の型式は何の商品なのでしょうか・・・

私も数社のものを使っていますが、そのような現象に陥ったことが
ないので・・・

以上。


マトメ  2005-04-13 05:27:32  No: 56941

いかに Windows とはいえ、
一アプリケーションから、ブルーバックを出して OS ごと落とすのは至難。
その時点でハードやドライバの確認をまずするべき。


ひでらん  2005-04-14 18:02:00  No: 56942

岡田 之仁さん、ツールの紹介助かりました。役立ってます。

その『危ない』USB−シリアル変換アダプタはどこのだ?
心配になってしまうじゃないか! という事ですね?
すみません、自社製品です。(おぃおぃ)
一般の方がUSB-シリアル変換器として入手するのは無理だと
思います。

使用しているICは、IOさんのRSAQ2などで使用されている物と
同じ物ですが、簡単に調べた限りではRSAQ2の最新ドライバで
は発生していないようです。ドライバはメーカーから購入した
物なのですが、古くてバグがあるのかもしれません。

マトメさん、言われている事ごもっともです。
ですが、実は私がATLを使用してDLL作るの初めてなんです。
それで、自分のミスかと思い調査中という事です。
自分に自信があれば、すぐドライバを疑ったのですが・・・。

でわ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加