例程代码
server.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main()
{
int sockfd=socket(AF_INET,SOCK_STREAM,0);
assert(sockfd!=-1);
struct sockaddr_in ser,cli;
memset(&ser,0,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(6000);
ser.sin_addr.s_addr=inet_addr("192.168.132.144");
int res=bind(sockfd,(struct sockaddr*)&ser,sizeof(ser));
assert(res!=-1);
listen(sockfd,5);
while(1)
{
int len=sizeof(cli);
int c=accept(sockfd,(struct sockaddr*)&cli,&len);
if(c<0)
{
perror("error\n");
continue;
}
while(1)
{
char recvbuf[500]={0};
int n=recv(c,recvbuf,500,0);
if(n<=0)
{
printf("one client over\n");
break;
}
printf("n:%d\n",n);
send(c,recvbuf,500,0);
}
close(c);
}
close(sockfd);
}
client.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main()
{
int sockfd=socket(AF_INET,SOCK_STREAM,0);
assert(sockfd!=-1);
struct sockaddr_in ser,cli;
memset(&ser,0,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(6000);
ser.sin_addr.s_addr=inet_addr("192.168.132.144");
int res=connect(sockfd,(struct sockaddr*)&ser,sizeof(ser));
assert(res!=-1);
while(1)
{
printf("please input:");
fflush(stdout);
char buff[500]={0};
fgets(buff,500,stdin);
buff[strlen(buff)-1]=0;
if(strcmp(buff,"end")==0)
{
break;
}
send(sockfd,buff,500,0);
char recvbuff[500]={0};
int n=recv(sockfd,recvbuff,500,0);
printf("n: %d\n",n);
}
close(sockfd);
}
编译代码
gcc server.c -o server.out -g
gcc client.c -o client.out -g
使用gcc编译代码时要添加-g选项,这样生成的可执行文件才能使用gdb进行调试。
GDB调试程序
开启gdbserver服务
gdbserver 192.168.132.144:1234 server.out
192.168.132.144是程序运行的本机ip,1234是gdbserver服务监听的端口号,自己指定。然后拷贝一份server,out到本地,执行:
gdb server.out
可以看到本地显示: 远程主机显示: 然后开始进行调试: 常用的命令有:
指令 | 作用 |
---|
help(/h) | 查看帮助命令 | run(/r) | 重新开始运行文件 | list(/l) | 查看源代码 | break(/b) | 设置断点 | continue(/c) | 继续执行代码 | set(/s) | 设置变量值 |
|