0

Linux(Ubuntu 11.04 64ビットカーネル2.6.38)で、ネットワーク用のマルチスレッドサーバー(Pthreadsを使用)を約2か月間開発しています。

Cコードは現時点で約 7000 行です。複数のクライアントが接続してサービスを受けるネットワークで使用しています。それはかなりスムーズに実行されています。

突然、私は少し奇妙な問題に直面しています。ときどき (10 回に 1 回程度) サーバーがセグメンテーション違反によりクラッシュします。私はコード全体を見てきましたが、この背後にある実際の理由を見つけることができないようです. ここで何がうまくいかないのか、または実際のバグを見つけるために何をすべきかについて、誰かが私を案内してくれますか?

4

2 に答える 2

3
  1. コア ファイルの生成を有効にします。アプリケーションがクラッシュしたら、デバッガーをロードします
  2. valgrind とメモリ チェックを使用してアプリケーションを実行する
  3. 単体テストを書きます。それらの多く、およびカバレッジを 100% に増やします。
  4. valgrind の hellgrindを使用してアプリケーションのストレス テストを行い、マルチスレッド アプリケーションをテストします。
于 2012-04-16T20:27:22.543 に答える
1

100% のカバレッジは現実的ではありませんが、85% ~ 95% は、勤勉に行うことで合理的に実現できます。

奇妙なエラーが発生する理由について: http://stromberg.dnsalias.org/~strombrg/checking-early.html

あなたは、これが突然起こり始めたと言いました。Mercurial、Git、SVN などのソース コード管理システムを使用していることを願っています。バックアップをお持ちの場合 (または夜間のバックアップをお持ちの場合) は、おそらく問題が発生した頃に行われた変更を振り返って、未定義のメモリ参照である可能性が高いエラーを見つける必要があります。

于 2012-04-16T21:06:18.107 に答える