apple:socket apple$ gcc test64.c
apple:socket apple$ ./a.out
__x86_64__apple:socket apple$
apple:socket apple$ gcc -m32 test64.c
apple:socket apple$ ./a.out
__i386__apple:socket apple$
代码如下
#include <stdio.h>
int main(int argc ,char* argv)
{
#ifdef __x86_64__
printf("__x86_64__");
#elif __i386__
printf("__i386__");
#endif
return 0;
}
---------
写了个socket,64位系统保错,32位不报错
使用gcc -m32 -o server server.c 编译解决
/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(void)
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int listenfd, connfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i, n;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(listenfd, 20);
printf("Accepting connections ...\n");
while (1) {
cliaddr_len = sizeof(cliaddr);
connfd = accept(listenfd,
(struct sockaddr *)&cliaddr, &cliaddr_len);
n = read(connfd, buf, MAXLINE);
printf("received from %s at PORT %d\n",
inet_ntop(AF_INET, &cliaddr.sin_addr, str,sizeof(str)),
ntohs(cliaddr.sin_port));
for (i = 0; i < n; i++)
buf[i] = toupper(buf[i]);
write(connfd, buf, n);
close(connfd);
}
}
client:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char *argv[])
{
struct sockaddr_in servaddr;
char buf[MAXLINE];
int sockfd, n;
char *str;
if (argc != 2) {
fputs("usage: ./client message\n", stderr);
exit(1);
}
str = argv[1];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port = htons(SERV_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
write(sockfd, str, strlen(str));
n = read(sockfd, buf, MAXLINE);
printf("Response from server:\n");
write(STDOUT_FILENO, buf, n);
close(sockfd);
return 0;
}
查找问题的时候参考这个链接http://jimmyleeee.blog.163.com/blog/static/930961820103822435873/
分享到:
相关推荐
该手册涵盖了 GDB 的基本概念、使用方法、调试技巧等内容,是 STM32 开发者的必备指南。 描述解释 本手册是 STM 官方提供的 STM32 调试指南,旨在指导开发者使用 GDB 调试 STM32 微控制器。该手册详细介绍了 GDB 的...
本文将基于给定的"GDB--gdb调试.pdf"文件内容,深入解析GDB的基本概念、使用方法及高级功能,帮助读者快速掌握GDB调试技巧。 ### GDB概览 GDB是GNU项目的一部分,由Richard Stallman、Roland Pesch、Stan Shebs等...
以下是一些`gdb`常用的调试技巧: 1. **启用gdb调试** - **启动core**:当你有一个程序崩溃并产生了核心转储文件(core dump),你可以用`gdb <program> core`命令来调试,其中`<program>`是导致core dump的程序,...
这本书《100个gdb调试技巧-高清书签版》显然是为了帮助开发者深入学习和掌握GDB的高级技巧。 从提供的文件内容来看,这本书包含了大量关于GDB的实用技巧,覆盖了GDB的多个方面。以下是一些关键点的展开: 1. GDB...
Linux gdb 调试技巧 在本文中,我们将总结 GDB 调试过程中的一些重要细节,并提供了一些有用的调试技巧。 启动 GDB GDB 提供了两种方式来启动调试: 1. 启动 Core 文件:`gdb <program> core` 2. 附加到已运行的...
《GDB调试程序[陈皓]》与《GDB调试工具指南》这两份PDF文档,是深入了解和精通GDB(GNU Debugger)这一强大调试工具的重要参考资料。GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行...
陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...
总结来说,“GDB调试参考手册”提供了全面、深入的指南,不仅涵盖了GDB基础功能,也介绍了高级调试技巧,对从事软件开发和调试的专业人员来说是宝贵的参考资料。通过熟悉这些内容,开发者能够更加有效地使用GDB来...
使用gdb调试嵌入式应用程序可以帮助开发者快速定位和解决软件 bug,提高开发效率和产品质量。 gdb调试嵌入式应用程序的步骤 1. 安装gdb:首先需要安装gdb,可以从gnu官网下载最新的版本,然后编译和安装arm-gdb。 ...
### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是对于系统级编程和复杂应用的维护,一个高效、功能全面的调试工具是不可或缺的。GNU调试器(GDB)正是这样一款强大的调试工具,它...
三、高级调试技巧 1. **条件断点**:使用`break`命令时可以添加条件,如`b main if x > 10`,只有当x大于10时,才会在main函数处停止。 2. **显示自动变量**:`display`命令可以监控一个变量,每次执行后都会显示...
### Linux 下 GDB 调试工具详解 #### GDB 概述 GDB(GNU Debugger)是一款由GNU项目开发的、广泛应用于...对于在Linux环境下进行软件开发的工程师来说,熟练掌握GDB的使用技巧将极大地提高工作效率和问题解决能力。
尽管GDB是一个非常强大的调试工具,但是在使用过程中,用户还是需要掌握一些基础的程序调试技巧和理念。比如,要善于设置断点,合理地使用断点可以帮助用户快速定位到问题所在。同时,用户也需要学会如何查看和分析...
总之,Linux下的GDB调试技巧对于任何开发者来说都是必备技能,无论是在排查复杂问题还是优化代码性能方面,都能发挥巨大作用。通过深入学习和实践,你将能够熟练运用GDB解决各类编程挑战。这份"Debug with GDB"的...
在IT行业中,调试是开发过程中的重要环节,用于找出并修复...总之,熟练掌握GDB调试技巧,能极大地提高程序员的效率,减少bug的生命周期,确保软件质量。通过实践和学习,你将能够运用这些命令解决各种复杂的调试问题。
《GDB调试工具指南》深度解析 一、GDB概览 GDB(GNU调试器)是GNU项目的一部分,是一款广泛使用的开源调试工具,适用于多种操作系统和编程语言,包括C、C++等。它允许开发者在程序运行时进行调试,包括设置断点、...
### GDB调试工具指南 #### 一、GDB概述与基本使用 GDB(GNU调试器)是一款功能强大的源码级程序调试工具,主要用于Linux环境下C/C++等语言的程序调试。它允许开发者在程序执行过程中设置断点、单步执行、查看变量...
gdb test 进入调试 需要调试的地方打下断点,run运行到断点处。 r 运行到断点处,info thread可以查看被调试的线程。 thread apply all bt 让所有线程打印堆栈信息 set scheduler-locking off|on|step 在使用...
本指南将带你快速入门gdb,并详细介绍其常用命令和调试技巧。 **一、gdb快速入门** 1. **安装gdb**: 首先,确保你的系统中已经安装了gdb。在大多数Linux发行版中,可以通过包管理器如`apt-get`或`yum`来安装。在...