`
macintosh
  • 浏览: 11972 次
社区版块
存档分类
最新评论

gdb调试技巧 32位和64位

    博客分类:
  • gdb
阅读更多
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/
分享到:
评论

相关推荐

    STM32 GDB调试手册

    该手册涵盖了 GDB 的基本概念、使用方法、调试技巧等内容,是 STM32 开发者的必备指南。 描述解释 本手册是 STM 官方提供的 STM32 调试指南,旨在指导开发者使用 GDB 调试 STM32 微控制器。该手册详细介绍了 GDB 的...

    GDB--gdb调试.pdf

    本文将基于给定的"GDB--gdb调试.pdf"文件内容,深入解析GDB的基本概念、使用方法及高级功能,帮助读者快速掌握GDB调试技巧。 ### GDB概览 GDB是GNU项目的一部分,由Richard Stallman、Roland Pesch、Stan Shebs等...

    gdb常用调试技巧收集

    以下是一些`gdb`常用的调试技巧: 1. **启用gdb调试** - **启动core**:当你有一个程序崩溃并产生了核心转储文件(core dump),你可以用`gdb &lt;program&gt; core`命令来调试,其中`&lt;program&gt;`是导致core dump的程序,...

    100个gdb调试技巧-高清书签版

    这本书《100个gdb调试技巧-高清书签版》显然是为了帮助开发者深入学习和掌握GDB的高级技巧。 从提供的文件内容来看,这本书包含了大量关于GDB的实用技巧,覆盖了GDB的多个方面。以下是一些关键点的展开: 1. GDB...

    Linux gdb常用调试技巧

    Linux gdb 调试技巧 在本文中,我们将总结 GDB 调试过程中的一些重要细节,并提供了一些有用的调试技巧。 启动 GDB GDB 提供了两种方式来启动调试: 1. 启动 Core 文件:`gdb &lt;program&gt; core` 2. 附加到已运行的...

    GDB调试程序[陈皓]&GDB调试工具指南

    《GDB调试程序[陈皓]》与《GDB调试工具指南》这两份PDF文档,是深入了解和精通GDB(GNU Debugger)这一强大调试工具的重要参考资料。GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行...

    用GDB调试程序(整理有书签).pdf

    陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...

    GDB调试参考手册

    总结来说,“GDB调试参考手册”提供了全面、深入的指南,不仅涵盖了GDB基础功能,也介绍了高级调试技巧,对从事软件开发和调试的专业人员来说是宝贵的参考资料。通过熟悉这些内容,开发者能够更加有效地使用GDB来...

    使用gdb调试嵌入式应用程序

    使用gdb调试嵌入式应用程序可以帮助开发者快速定位和解决软件 bug,提高开发效率和产品质量。 gdb调试嵌入式应用程序的步骤 1. 安装gdb:首先需要安装gdb,可以从gnu官网下载最新的版本,然后编译和安装arm-gdb。 ...

    Linux下gdb调试工具指南

    ### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是对于系统级编程和复杂应用的维护,一个高效、功能全面的调试工具是不可或缺的。GNU调试器(GDB)正是这样一款强大的调试工具,它...

    gdb调试工具使用手册

    三、高级调试技巧 1. **条件断点**:使用`break`命令时可以添加条件,如`b main if x &gt; 10`,只有当x大于10时,才会在main函数处停止。 2. **显示自动变量**:`display`命令可以监控一个变量,每次执行后都会显示...

    linux下GDB调试

    ### Linux 下 GDB 调试工具详解 #### GDB 概述 GDB(GNU Debugger)是一款由GNU项目开发的、广泛应用于...对于在Linux环境下进行软件开发的工程师来说,熟练掌握GDB的使用技巧将极大地提高工作效率和问题解决能力。

    GDB调试程序资料

    尽管GDB是一个非常强大的调试工具,但是在使用过程中,用户还是需要掌握一些基础的程序调试技巧和理念。比如,要善于设置断点,合理地使用断点可以帮助用户快速定位到问题所在。同时,用户也需要学会如何查看和分析...

    linux 使用GDB调试 资料

    总之,Linux下的GDB调试技巧对于任何开发者来说都是必备技能,无论是在排查复杂问题还是优化代码性能方面,都能发挥巨大作用。通过深入学习和实践,你将能够熟练运用GDB解决各类编程挑战。这份"Debug with GDB"的...

    gdb调试常用命令及调试例子

    在IT行业中,调试是开发过程中的重要环节,用于找出并修复...总之,熟练掌握GDB调试技巧,能极大地提高程序员的效率,减少bug的生命周期,确保软件质量。通过实践和学习,你将能够运用这些命令解决各种复杂的调试问题。

    GDB调试工具指南.pdf

    《GDB调试工具指南》深度解析 一、GDB概览 GDB(GNU调试器)是GNU项目的一部分,是一款广泛使用的开源调试工具,适用于多种操作系统和编程语言,包括C、C++等。它允许开发者在程序运行时进行调试,包括设置断点、...

    GDB调试工具指南

    ### GDB调试工具指南 #### 一、GDB概述与基本使用 GDB(GNU调试器)是一款功能强大的源码级程序调试工具,主要用于Linux环境下C/C++等语言的程序调试。它允许开发者在程序执行过程中设置断点、单步执行、查看变量...

    使用GDB调试多线程实例详解

    gdb test 进入调试 需要调试的地方打下断点,run运行到断点处。 r 运行到断点处,info thread可以查看被调试的线程。 thread apply all bt 让所有线程打印堆栈信息 set scheduler-locking off|on|step 在使用...

    gdb调试指南

    本指南将带你快速入门gdb,并详细介绍其常用命令和调试技巧。 **一、gdb快速入门** 1. **安装gdb**: 首先,确保你的系统中已经安装了gdb。在大多数Linux发行版中,可以通过包管理器如`apt-get`或`yum`来安装。在...

Global site tag (gtag.js) - Google Analytics