调试中解决问题的经历

1、文件在windows下编译,运行都正常,但是在linux下就出编译错误,说一个宏没定义,还有open,close等几个操作文件的函数不认识。初步判断是宏设置编译选项的问题。于是先查open函数,发现在windows下是需要#include <fcntl.h>  这一句的。然后在全项目范围内找fcntl.h文件,发现在文件中是这样定义的:

        #ifdef HAVE_FCNTL_H
       #include <fcntl.h>
       #endif
      那么问题就聚集在HAVE_FCNTL_H宏上了。

                <script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>

      然后用相同的方式又找到了几个要定义的宏,在文件中加上定义,再编就通过了。

 

2、原程序编译没有问题。全部删除又从服务器上重新下了遍。再编译就出了好几个LINK问题。

  CaObj.obj : error LNK2019: 无法解析的外部符号"public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall ZNmaInfo::GetInfo(enum NmaInfoFlag)" (?GetInfo@ZNmaInfo@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4NmaInfoFlag@@@Z),该符号在函数"private: int __thiscall ZCaObj::GetAddrhandler(unsigned char *)" (?GetAddrhandler@ZCaObj@@AAEHPAE@Z) 中被引用
  

  解决思路是先找ZNmaInfo::GetInfo的定义在哪里。结果在项目的一个公共文件夹里发现了NmaInfo.cpp和.h文件。将这两个文件包含进当前的项目,则此LINK问题顺利通过。

  LINK问题类型不少,但是,基本思路应该都是包含头文件、库文件之类没包含进去的问题。因为是链接阶段报的错,所以问题的主因是,找需要链接的东西没有找到。

 

 

3、程序中变量出现乱码。

 从数据库中读出的数据,然后做了copy之类的工作。copy前特意把此变量打出来,显示正常,但是copy后的新变量打出的数据就有乱码。最后发现是copy所使用的函数造成。将memcpy改为strcpy后,问题解决。

 strcpy是拷贝字符串,以/0为标志结束(即一旦遇到数据值为0的内存地址拷贝过程即停止)
 strcpy的原型为
 char *strcpy(char *dest, const char *src)

 而memcpy是给定来源和目标后,拷贝指定大小n的内存数据,而不管拷贝的内容是什么(不仅限于字符)
 memcpy的原型为
 void *memcpy(void *dest, const void *src, size_t n);
 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值