当前位置:  技术问答>linux和unix

Linux 64下调试程序遇到的相当诡异的问题(高手进)

    来源: 互联网  发布时间:2017-04-23

    本文导语:  最近在Linux下编译一个程序,CentOS 32位编译通过,运行功能正常;在CentOS 64位下编译通过,但运行功能总是出错。 我用GDB跟踪了一下代码,发现一个诡异的、百思不得其解的问题:结构体参数在函数的调用过程中,...

最近在Linux下编译一个程序,CentOS 32位编译通过,运行功能正常;在CentOS 64位下编译通过,但运行功能总是出错。
我用GDB跟踪了一下代码,发现一个诡异的、百思不得其解的问题:结构体参数在函数的调用过程中,悄无声息的发生了变化,而这个结构体参数只是被函数作为实参来传递,函数内部没有对结构体进行修改。
大致流程如下:

void cpi_query_binary(char *name, char *db)调用了函数ii_query_init(&envHandle),这个函数的大致实现如下:

void ii_query_init(II_PTR *envHandle)

    ...
    II_INIT parmInit;
    parmInit.version = 2;
    parmInit.timeout = -1;
   
    ii_initialize(&parmInit);
    ...
}
函数void ii_query_init(II_PTR *envHandle)又调用了ii_initialize(&parmInit),将结构体参数II_INIT parmInit赋值后传递给了ii_initialize(&parmInit)。
ii_initialize(&parmInit)的实现如下:

II_EXTERN II_VOID II_FAR  II_EXPORT ii_initialize(II_INIT II_FAR *init_parm)
{
    //进入函数后,用gdb指令打印init_parm,发现parmInit.version的值是-1,而不是先前的2。
    //ii_initialize(&parmInit)又调用IIapi_intialize(init_parm),将错误的信息传给了内核,造成程序功能不正常
    IIapi_intialize(init_parm);
}

上面这种情况只在Linux 64位下存在。同样的代码,我在Linux 32位下运行,功能完全正常。
不知道是什么原因造成了上面的问题?

|
很可能是你传递过程中,参数结构体的名字不同或者结构体内部数据类型不完全对应导致。

    
 
 

您可能感兴趣的文章:

  • 如何使用linux下gdb来调试python程序
  • linux 新手散分贴 我要在linux下调试多个.c和.h文件的程序 怎么调试?
  • linux下用gdb调试程序感觉非常不方便,不知道大家使用的什么工具进行调试的呀?
  • linux gdb: 我在一台机器上编译的程序用GDB可以调试,把程序放到另外一台机器上调试,调试信息就没有了 这是什么原因呢?
  • linux下调试的问题
  • 请问Linux下的C语言程序开发大家如何进行断点调试和单步调试?
  • 请教 Linux 中 eclipse + CDT 调试问题
  • linux下调试程序...
  • 关于linux下eclipse调试c++程序的问题
  • 到底怎么样调试linux内核啊?
  • linux下有没有类似于debugview的东东///或者linux下除了gdb,还有什么可以用于调试的软件吗?
  • 请问载linux下如何调试汇编程序,有没有像debug的程序。
  • linux下的调试工具
  • Linux程序调试工具 XBuildStudio
  • linux下如何单步或设置断点调试驱动或应用程序
  • LINUX下的程序调试问题
  • 调查一下:编写Linux内核模块 驱动程序各位高手所用的编辑环境和调试工具
  • linux 下用gdb调试器出现问题
  • 在Linux下用哪种调试工具比较好!(有加分!!!)
  • 请问linux中如何跟踪调试USB无线网卡驱动
  • 下载同一样东西的时候遇到两种版本:Linux-DBG和Linux-OPT,有什么不同呢? iis7站长之家
  • 请问linux下有什么函数相当于MFC里的AfxIsValidAddress啊?
  • Linux下有相当于3DS MAX的软件吗???
  • linux的目录是不是相当于windows的文件夹?
  • Linux configure 相当于 windows下的什么命令
  • Linux下相当于Windows下的排程(自动定时执行任务)的命令或文件夹是什么 , 或如何设置??
  • 请问,在unix/linux 环境中有没有可以移动文件的C/C++的标准函数?相当于命令mv。
  • linux网络配置,好几天了,相当郁闷,高手请进.......
  • [问题]关于linux下拦截数据包并予以修改的问题(相当win下HOOKapi拦截封包)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 装linux遇到问题,有高手在线帮忙吗?请发信息给我
  • linux分区时遇到的问题
  • 第一次装linux遇到的问题
  • Linux下的小程序,编译时遇到的错误!
  • 刚接触linux,遇到输入法问题
  • 下载同一样东西的时候遇到两种版本:Linux-DBG和Linux-OPT,有什么不同呢?
  • 初学linux遇到一个小问题
  • Linux 安装之后的 遇到的奇怪问题?
  • 裁剪LINUX内核遇到的问题
  • linux启动时遇到的问题?求救!!!
  • linux切换用户遇到的问题,求解!
  • linux与win98互连时遇到的问题
  • Linux下Oracle安装时遇到的问题及解决
  • linux 下面安装mysql遇到错误
  • linux图形界面下作Raid时遇到的问题
  • LINUX下C++开发中遇到的问题
  • 遇到个问题,Linux权限问题!
  • linux下安装QT遇到的问题!
  • 读linux内核list.h遇到的问题
  • slackware linux中遇到的问题
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,