调试中解决问题的经历
2007-10-24 15:34
260 查看
1、文件在windows下编译,运行都正常,但是在linux下就出编译错误,说一个宏没定义,还有open,close等几个操作文件的函数不认识。初步判断是宏设置编译选项的问题。于是先查open函数,发现在windows下是需要#include <fcntl.h> 这一句的。然后在全项目范围内找fcntl.h文件,发现在文件中是这样定义的:
然后用相同的方式又找到了几个要定义的宏,在文件中加上定义,再编就通过了。
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);
#ifdef HAVE_FCNTL_H #include <fcntl.h> #endif 那么问题就聚集在HAVE_FCNTL_H宏上了。 |
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);
相关文章推荐
- 解决Android Studio中调试总出现waiting for adb问题
- 解决Windows XP下IIS搭建ASP.NET服务器调试时的IIS 500错误的问题
- React-Native调试状态下App运行缓慢问题解决方案
- 编译器&调试---emulator.exe 遇到问题需要关闭 的解决办法
- 解决Silverlight无法调试的问题
- 解决安装IE8后,VS2005无法调试的问题
- 打印调试技术 printk klogd dmesg(解决打印信息的问题)
- ASP/ASP.NET不能调试问题的解决办法
- 解决利用安卓真机调试程序时日志不显示的问题
- “Android Studio 真机调试时LogCat无显示问题”的解决
- 解决VS调试Web应用无问题而部署在IIS上报500和403的问题
- 调试MOST SSO中遇到的问题的解决过程
- 解决vs2005调试时出现未加载符号的问题
- 解决win10下Chrome手机调试模式小圆点不显示问题
- VS2005(c#)项目调试问题解决方案集锦
- xcode解决断点调试无效问题
- chrome下input[type=text]的placeholder不垂直居中的问题解决 调试通过
- VS调试Qt程序时查看变量显示地址值问题解决
- [iphone]iphone真机调试“无法安装”问题-解决
- 解决iOS6中编译和真机调试出现不支持armv7s的问题