2012-02-25 2 views
0

私はコンピュータネットワーキングクラスに属しており、クライアントからのメッセージを送受信するシンプルなサーバを作成しています。しかし、私のサーバーは、指定されたクライアントが接続するときにセグメンテーションフォールトを取得しています。これをデバッグするためにGDBを実行するには?私はgdbでサーバーを実行しようとしましたが、サーバーに無限のwhileループがあり、segfaultをトリガーするために同時にクライアントを実行する方法がわからないため、ハングするだけです。誰も助けることができますか?GDBヘルプクライアント - サーバ

+0

gnuのコンパイラもgccまたはg ++を使用していると仮定していますが、コンパイラフラグ-gを試しましたか? – pyCthon

答えて

0

サーバースポーンそれぞれ接続されたクライアントのために(フォーク())別のプロセスが、あなたはおそらくフォークモードに従う設定する必要がある場合:http://www.delorie.com/gnu/docs/gdb/gdb_26.html 直後受け入れる作成されたプロセスのデバッグを開始します「に設定児童・フォーク・モードに従います」 ()とfork()です。

もう1つのオプションは、コアファイルを分析することです。あなたがそれらを有効にする必要がありますので、コアダンプはほとんどが、デフォルトでは無効になっています

ulimit -c unlimited 

は、それがセグメンテーションフォールトせて、コアと、あなたのバイナリにそれを指してGDBを起動し、サーバーを実行します。

gdb -c ./core.xxxx ./server 
1

Iドンsegfaultをトリガーするために同時にクライアントを実行する方法を知っていません。

シンプル:別のウィンドウを開き、クライアントをからに実行します。