Shammer's Philosophy

My private adversaria

EchoClientV2_Debug

EchoClientV2_apha - Shammerismでうまくいかなかったのでデバッグ。いつ Segmentation fault になっているのか?サーバーからの受け取り文字列は表示されていないのでその前、かつ、サーバーは送信文字を受け取っているのでその後。結局、追記した場所だ(当たり前か)。

まず、デバッグのために以下のように receiveMsgSize を表示させてみた。

	    // Receive message
	    int receiveMsgSize = 0;
	    receiveMsgSize = recv(sock, echo_buffer, sizeof(echo_buffer) - 1, 0);
	    printf("receiveMsgSize:%d\n", receiveMsgSize);

結果、以下のように表示されるようになった。

$ ./eclient 127.0.0.1 10080 Test
receiveMsgSize:4
Segmentation fault: 11

次の段階として、コードを以下のように変更。

	    // Receive message
	    int receiveMsgSize = 0;
	    receiveMsgSize = recv(sock, echo_buffer, sizeof(echo_buffer) - 1, 0);
	    printf("receiveMsgSize:%d\n", receiveMsgSize);
	    if( receiveMsgSize < 0 ){
		error_exit("recv failed...\n");
	    }
	    else {
		printf("DebugA\n");
		printf("Received Message:%s\n", *echo_buffer);
		printf("DebugB\n");
	    }

おそらく、DebugAは出力されるがDebugBは出力されない。結果は以下の通り。

$ ./eclient 127.0.0.1 10080 Test
receiveMsgSize:4
DebugA
Segmentation fault: 11

悪いのはprintf("Received Message:%s\n", *echo_buffer);の実装、ということになるが、、、どう書くべきなんだ?文字列を出力するときどうしていたっけ・・・