之前遇到棘手的BUG总是在处理过后就不管了,导致后面碰到相同问题后重复工作太多。现专门开辟一篇日志以记录接下来一路上比较棘手的“坑”的修复历程:

【C++篇】

1.mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file

说明:由于VC需要把生成的文件中嵌入MANIFEST文件,而由于杀毒软件之类的会握有这个文件句柄(因为杀毒软件
发现这个EXE,DLL正在读写),于是VC就写不进去了,方法是暂时关闭杀毒软件,这样就不用

解决方法:那就是在项目属性——配置属性——链接器——清单文件中, 把生成清单改成否就行了。如果”生成清单“选项为是,则最终会生成exe文件以及.exe.manifest文件

2.error LNK2001: 无法解析的外部符号 解决方法

说明:这个错误非常经常看到,原因是因为项目属性的”依赖项“配置出错。无论你有多确定,一定要重新检查依赖库,或者换个库

解决方法:在项目属性(ALT+F7)->链接器->输入->依赖项中根据出错信息添加必要的.lib库文件。

2.1在实现单例的时候error LNK2001: 无法解析的外部符号 "private: static class Singleton * Singleton::instance" (?instance@Singleton@@0PAV1@A)

原文:

class Singleton
{
public:
static Singleton *GetSingleton()
{
if(instance==NULL) instance=new Singleton();
return instance;
}
~Singleton()
{
cout<<"析构函数"<<endl;
}
private:
Singleton(){};
static Singleton*instance;
};
int main()
{
Singleton*p=Singleton::GetSingleton();
return ;
}

说明:这种情况是因为静态成员instance没有初始化

解决方法:

在cpp文件开始时添加  Singleton* Singleton::instance = NULL

3.fatal error C1189: #error :  WinSock.h has already been included

说明:在开始编译boost::asio库时经常碰到这个错误,这是普遍现象

解决方法:

  1、在包含Windows.h前定义宏WIN32_LEAN_AND_MEAN,就OK了(WIN32_LEAN_AND_MEAN表示不包含一些极少使用和偏门的资料)

  2、在包含Windows.h前包含winsock2.h

  3、在包含Windows.h前包含asio.hpp

  4、项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义,在其中添加 : WIN32_LEAN_AND_MEAN

4.error C2664: 'log4cplus::PropertyConfigurator::doConfigure' : cannot convert parameter 1 from 'const char [21]' to 'const log4cplus::tstring &'

出错语句:Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("test"));

说明:cannot convert *** from ***往往是由于类型出错,很常见的错误是由于没有加宏导致在不同的平台下不兼容,比如win32编程中的字符串宏_T()、_TEXT()

解决方法:改为PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));

5.error LNK2019: 无法解析的外部符号 _cvReleaseImage,该符号在函数 _main 中被引用

说明:这个错误常见于配置opencv过程中,虽然按照教程配置了,但是仍旧报这个错误。其实只是vs的设置还差一步:将编译平台从win32转换到x64。

解决方法:在配置管理器中:活动解决方案平台->新建->x64

6.error LNK2019: 无法解析的外部符号 __imp_pthread_join,该符号在函数 main 中被引用

说明:跟5的错误是一样的,这是的措施都排查掉后仍旧出现的错误。原因是lib库没配置成功。看一下pthread_joint所在的lib库是什么库,然后用#pragma comment(lib, "sssss.lib");就解决了


【IOS平台篇】

1.

duplicate symbol _OBJC_METACLASS_$_DMSDWebImagePrefetcher in:
/Users/admin/Library/Developer/Xcode/DerivedData/BankFinder-fqgijokhpyhxxycxegilsfupadsm/Build/Intermediates/BankFinder.build/Release-iphoneos/BankFinder.build/Objects-normal/armv7/DMSDWebImagePrefetcher.o
/Users/admin/Desktop/OSChina/BankFinder/BankFinder/3rdLibs/DomobUniversal/libDomobThree.a(DMSDWebImagePrefetcher.o)

说明:出现duplicate symbol错误时不要慌,不外乎两种类型的错误:第三方静态lib文件之间冲突,这时候在错误描述里面会体现出来;第二种是源文件(.h .m)文件之间的冲突,这里包括工程中的源文件之间的冲突以及工程的源文件与lib库中的源文件冲突。此处属于第二种中的后者。

解决方法:根据错误提示,找到相应的文件,比如本处是DMSDWebImagePrefetcher.h(.m)在工程中出现多次,排查并删掉之

2.xcode编译失败,但是无任何出错的信息!不会有红色的编译错误提示!

说明:很奇特的情况,原因是当前的系统时间之后了一天,改回正常的时间就没问题了!

解决方法:修正系统时间

3.no matching function for call to ***(***表示函数名)

说明:从字面上理解很像是函数不存在,但其实是简单的一个错误。这种情况一般发生在oc调用c或者C++时,主要是由函数的参数不匹配引起的!

解决方法:修正函数的参数

4.自定义view,在loadNibNamed这句上始终crash掉,但是不显示异常原因!

说明:这种情况一般是因为xib的outlet连接错误,我这次遇到的错误就是本来outlet链接了一个property,但是后面这个property名称被我改了,但是xib中没有做相应的更改,导致crash。如何确认是否正确呢?在你的自定义xib的view上右键查看所有的outlet,如果有错就会有黄色标志。

解决方法:重新连接outlet

5.cocoaPod设置好PodFile并使用pod update或者pod install下载新的第三方库后,编译代码没问题,在运行时提示“unrecognized selector”错误。

说明:理论上看,所有流程都没问题,头文件也加了,库也加到工程了,command+方法也能正确找到对应头文件,但在运行时却出错。怀疑是工程设置的问题。最后参考SO的文章。去工程设置的Other Linker Flag中检查发现,新添加的库没有出现在里面,也就是说虽然库资源都有了,但是xcode无法加载。

比如,我们期望新增MMPlaceHolder库,但是在上述操作完成后设置是这样的:

解决方法:

6.error is Error Domain=NSURLErrorDomain Code=-1000 "错误的 URL" UserInfo=0x8088e70 {NSUnderlyingError=0x8083680 "错误的 URL", NSLocalizedDescription=错误的 URL

说明:在进行HTTP请求时出现的-1000的错误码,一般来说这个错误码并不是公司或者项目的后台返回来的,而是系统预定义的一种错误类型。原因是url中存在某些非法字符,比如空格以及中文字符。而空格很有可能在http://...的h前面。

因此如果你的代码没有容错能力,没有对url中的空格以及中文字符等非法字符进行检测,那当发送请求时就会出现这个错误。

解决方法:1、检查url是否有空格;2、检查是否含有中文。url中有中文是允许的,但是在发送前必须进行encoding编码(utf8)。而空格是必须要删除掉的

7.dyld: Symbol not found: _OBJC_CLASS_$_xxxxxxxxx

说明:今天遇到一个非常令人费解的崩溃bug,项目代码几年来一直正常运行,但是引入了其他组的某个SDK后在iOS6上崩溃,提示: dyld: Symbol not found: _OBJC_CLASS_$_NSURLSession 但是经过查证,我们的源码以及该SDK都没有使用过NSURLSession这个类。apple文档中说这个类包含在Foundation.framework中,但我们确实没有调用。但是把其他组的这个SDK删掉后又正常。这个问题目前还想不通,但是我们的解决方法如下,其他类似问题也可以按照这种方式解决。

解决方法:在工程设置的Build Phases->Link Binary with Libraries中将xxxxxxx所在的库从required改为optional,比如我遇到的情况就是改Foundation.framework.

8.[[NSBundle mainBundle] pathForResource:]获取到的资源路径一直是nil

说明:相关资源已经通过addTo的方式添加到xcode工程了,已确认非引用,但上述方法一直返回nil。排查后发现是xcode的一个bug,在添加资源时虽然已经是copy添加,但是xcode设置里的"Copy Bundle Resouces"列表中并没有该资源,需要点加号再次添加一次

解决方法:如上

9.XCode在build下是OK的,但是在发包Archive时却提示“library not found for -lpods-SDWebImage”。 怀疑是cocoaPods安装没更新,于是用pod install或者pod update命令重新安装。虽然成功安装,但是提示“

[!] The `WuJieCaoJoke [Debug]` target overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation

    - Use the `$(inherited)` flag, or

    - Remove the build settings from the target.”

重新Archive也还是出现library not found错误。

分析:实际上工程是有库的,pod生成的库都放到libPods.a自动添加到工程的build setting中去了。但仍旧找不到。正常情况下pod install是不会有警告的,所有archive通不过与警告应该有关系,可以先解决警告。

解法:根据终端的提示,去build setting中把所有cocoaPods中出现的库名字都删掉,然后加上一行$(inherited)就OK了。

10.XCode的经典"duplicate symbol"

分析:出现这个错误一般是因为build setting的Other Link Flag中添加了-all_load或者-force_load导致的。删除即可。为什么这两个标识会引起duplicate错误呢?all_load的意思是加载所有.a静态库里的文件。假设有A.a和B.a两个静态库,都使用了minizip的代码。使用all_load后工程就会有两份相同的minizip代码,导致错误。所以这两个标识要去掉。以前我们用这两个标识是因为xcode4.2之前链接器有bug,当静态库中只有category时若没有使用all_load则无法识别库里的category。但xcode4.2之后bug修复了。

但是!但是!有时你会发现在other link flag中删掉all_load并没有真的删掉,今天就遇到。列表里明明已经删掉了,但是build setting中仍显示有-all_load。

解法:再次打开列表,删掉第一行的$inherit,bug解决,顺利编译


原创文章,转载请注明 编程小翁@博客园,邮件zilin_weng@163.com,微信Jilon,联系请注明“博客园”。欢迎各位与我在C/C++/Objective-C/机器视觉等领域展开交流!


【原】开发路上疑难BUG调试记录的更多相关文章

  1. geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践

    眼看就要端午节了,屌丝还在写代码,话说过节也不给轻松,折腾了一天终于解决了一个BUG,并完成了老板安排的求DEM坡度的任务,那么就分两段来表. 一.BUG调试 首先记录一天的BUG调试,简单copy了 ...

  2. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  3. 论 BUG调试与(程序猿)初学者

    作为一枚程序猿,BUG调试是最基本的技能,对于初学者更是重中之重.个人而言,要想为自己的程序猿生涯更上一层楼,就得知道什么是BUG调试,而且还必须知道怎么调好BUG.那么BUG究竟是什么呢?在我之前的 ...

  4. Visual Studio原生开发的20条调试技巧(下)

    我的上篇文章<Vistual Studio原生开发的10个调试技巧>引发了很多人的兴趣,所以我决定跟大家分享更多的调试技巧.接下来你又能看到一些对于原生应用程序的很有帮助的调试技巧(接着上 ...

  5. 一个疑难bug的解决过程

    一个crontab脚本,下载一个文件并把内容入mysql数据库.具体流程如下: 1, wget一个文件. 2,处理文件生成一个中间文件. 3,将中间文件load入库. 05 10 * * * /hom ...

  6. 最难忘的Bug调试经历

    摘要:目前,著名的社区问答网站Quora上出现一个很火的讨论:你调试过最难的Bug是什么?大家纷纷留言,把自己最痛苦的一次调试经验写下来. 相信每位程序员都有过一段不堪回首地Bug调试经历,程序员一听 ...

  7. VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)

    ------------VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)------------- WIN10已上线,随之而来的是VS2015:微软在 "WDK760 ...

  8. Visual Studio 原生开发的10个调试技巧(二)

    原文:Visual Studio 原生开发的10个调试技巧(二) 我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原 ...

  9. Android开发技术周报183学习记录

    Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...

随机推荐

  1. swift也开源了.

    swift也开源了 微软好多也开源. 这世界都开源了 你还等啥. 是因为 B2D 模式吗. 开发者人数众多, 足可以养活一个公司了.  有的叫生态圈.

  2. teamcity设置

    建立项目后首先要设置svn地址,并绑定 名字随便起 url是svn的地址 之后来做build step 有一个按钮可以自动检测,一般都能检测出来 执行这个似乎需要代理装什么东西 可以查看目前代理有那些 ...

  3. Yii中 RBAC(基于角色的访问控制权限)表结构原理分析

    这里有几个概念很重要,我简单用大白话说一下; 权限:就是指用户是否可以执行哪些操作. 如:小张可以发帖.回帖.浏览,小红只能回帖.浏览 角色:就是上面说的一组操作的集合. 如:高级会员有发帖.回帖.删 ...

  4. Microsoft Visual Studio 2013 VSTS单元测试指南

    安装vs2013时并未安装VSTS工具包,所以在工具栏:工具->拓展和更新   进行下载安装 vs13已经用了两年了,相比于之前老师推荐的vc6.0感觉要强出很多,刚上手时感觉比较困难,在使用一 ...

  5. AngularJS 五大特性,加快 Web 应用开发

    AngularJS 是谷歌的一个 JavaScript 框架,旨在简化前端应用程序的开发.如果你在开发单页的应用程序,我敢肯定你已经听说过它.我是 AngularJS 的忠实粉丝,在这篇文章中我将概述 ...

  6. extractCSS – 帮助你从 HTML 中快速分离出 CSS

    extractCSS 是一个免费的基于 Web 的应用程序,能够从 HTML 中提取风格相关的信息,包括 id.class 和内联样式,而且输出可以定制(缩进和括号的用法).该工具非常有用,当我们快速 ...

  7. 转载:第六弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿!

    大家好!博卡君原计划是能在国庆假期前把小程序的开发教程做完,给大家一套完整.系统的东西,不过由于最近小程序开发工具的拍照组件尚未完善,很多功能还不能顺利实现.我考虑了一下,觉得不如把拍照部分的一些代码 ...

  8. Gradle学习系列之六——使用Java Plugin

    在本系列的上篇文章中,我们讲到了如何自定义Property,在本篇文章中,我们将讲到如何使用java Plugin. 请通过以下方式下载本系列文章的Github示例代码: git clone http ...

  9. c3p0配置

    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN&q ...

  10. 一些java的书籍

    netty in action 中文版:http://pan.baidu.com/s/1pLnEKZL spring security-3.0.1:http://pan.baidu.com/s/1bp ...