2009-04-12 8 views
0

TCPとUDPソケットを使用するネットワークライブラリを開発します。 このDLLは、同じPCで負荷テストを複数回開始するtestclientによって使用されます。Windows XPでプログラム+ DLLを何度も起動する際の問題?

Windows Vistaでは、何度もtestclientを起動することは問題ありません。 Windows XPでは、最大5回まで起動することは問題ありませんが、6回以上起動してから1つのクライアントを閉じると、すべてのスタックトレースがクラッシュします。

はい、私たちはプロセス間コード(クライアント間のソケットのみ)を使用していませんが、クライアントの1つが終了すると、それらのすべてがクラッシュします。

私たちのDLLはMSVCでコンパイルされ、BoostとCrypto ++のlibs(静的にリンクされている)を使用しています。

異なるプロセスが互いに影響を与える理由は何ですか?

+0

閉じるクライアントのシャットダウンをデバッグしようとしましたか?シャットダウンをシングルステップで実行すると、クラッシュの正確な原因を見つけることができます。なぜ他の人がクラッシュするのかは次のステップです。 – eran

答えて

0

アイデア:いくつかのバグがあります。

真剣に、どんな情報がなくても何が問題なのかを知る方法はまったくありません。
プロセスがクラッシュすると、通常、プロセスがクラッシュする大きな理由があります。それが何であるかを調べる。 dllと実行可能ファイルをデバッグでコンパイルし、デバッガを接続して、取得したスタックトレースを理解します。あなたがナンセンスのスタックトレースを取得した場合は、その理由を調べてください。

は多くの問題と同様に、この1はによって解決される可能性が高い「ちょうどそれをデバッグする」

+0

特に、デバッガで少なくとも2つのクライアントを実行してみてください。 「ランダム」クラッシュが発生すると、その時点でアクセスされているメモリをすべてのスレッドと実行中のコードで調べます。それは図書館に関連していますか? – Arkadiy

+0

実際、それは実際にはオブジェクトを2回削除するというバグでした。これは不思議なことに、より多くのクライアントでしか発生しませんでした。ありがとうございました。 – Tarnschaf

1

は、私たちはあなたの問題を診断するために少しより多くのデータが必要になります。ただし、あるクライアントを停止するとすべてのクライアントがクラッシュすることを考慮すると、クライアントが相互に影響を与える可能性のあるすべての方法(プロセス間通信)を考慮する必要があります。暗黙的にも明示的にも。だから私は見て開始する

  • 6番目のクライアントが閉じられたときにサーバーは何をしますか。他の5つのクライアントが処理できない特別なパケットを送信しますか?
  • ファイルシステムに何か読み書きしていますか?
  • 共有メモリを使用していますか?一般的に

しかし、私はC++で一見ランダムなスタックトレースを有する通常スレッディング・ロジックに次

  • データ破損
  • 競合状態のいずれかが原因で発生していることがわかりました。
0

DLLを変更したり、DLLをロックすると、DLLに依存するプログラムがクラッシュする可能性があります。通常、DLLへの変更はファイルシステムによってロックされますが、アプリケーションでは通常とは異なることが起こる可能性があります。

+0

応答ありがとうございますが、DLLはプログラムの実行中に変更されません – Tarnschaf

関連する問題