出错总有原因 之第三方库不一定可靠啊
2014-02-08 22:39
323 查看
某年某月的某一天,测试人员发现我们的程序运行起来后发生了一次Crash, 但是无论如何也无法重现,也没有明显步骤,就是开始运行就Crash了,而且由于是C#的代码,Dump里面也没有多少有意义的信息,于是不了了之。
正式发布之后,不停的有客户出现类似的问题。Dump不管用,只能从系统日志中收集到一些错误信息,比如发生Crash的模块和Offset等等,通过编译时候生成的Map文件终于定位到了问题是发生在一个Intel提供的第三方库里面(具体的方法另写文章再讲)。而问题的原因其实很简单,这个第三方库是由C++写成的,但是在使用指针的时候根本就没有做判空检查,所有的指针都没有做判空检查。这个库是用来扫描UPNP设备的,我们的程序在启动的时候就开始扫描UPNP设备,正常情况下不会有问题,但是由于UPNP设备是各种各样的,有可能会取不到正确的信息,在取不到正确的信息的时候,很多指针都是NULL,如果在使用前不做检查,自然就容易Crash了!
而正是因为我们迷信这是Intel提供的第三方库,而且这个库本身非常复杂,将这个类库引入我们Solution的工程也就没有深入研究,从而导致了这个严重的问题。
可见,防御性编程是多么的重要啊!
正式发布之后,不停的有客户出现类似的问题。Dump不管用,只能从系统日志中收集到一些错误信息,比如发生Crash的模块和Offset等等,通过编译时候生成的Map文件终于定位到了问题是发生在一个Intel提供的第三方库里面(具体的方法另写文章再讲)。而问题的原因其实很简单,这个第三方库是由C++写成的,但是在使用指针的时候根本就没有做判空检查,所有的指针都没有做判空检查。这个库是用来扫描UPNP设备的,我们的程序在启动的时候就开始扫描UPNP设备,正常情况下不会有问题,但是由于UPNP设备是各种各样的,有可能会取不到正确的信息,在取不到正确的信息的时候,很多指针都是NULL,如果在使用前不做检查,自然就容易Crash了!
而正是因为我们迷信这是Intel提供的第三方库,而且这个库本身非常复杂,将这个类库引入我们Solution的工程也就没有深入研究,从而导致了这个严重的问题。
可见,防御性编程是多么的重要啊!
相关文章推荐
- 百度网盘第三方登录时出错,提示“由于网络原因”
- Windows Sockets 错误码及出错原因
- SQL6031N 在 db2nodes.cfg 文件的行号"1" 上出错。原因码为"10"。
- Gjson解析json出错 但是不知道什么原因
- 安装任何版本ActiveSync都出错原因
- xcode 编译出错 原因
- sql server 附加数据库出错代码5120/948原因分析。
- SQL6031N 在 db2nodes.cfg 文件的行号"1" 上出错。原因码为"10"。
- 微信登录失败——授权回调域名校验出错,错误码:10003原因及解决办法
- 负责任有担当三星电子联合第三方客观公正公布Galaxy Note7燃损原因
- Mat中imread出错原因
- custom control 控件运行时,没出错,但是跳出终止、放弃或忽略的提示,原因为如下:
- strust2 form标签加上validate="true"后出错,求问问题原因
- 关于.cpp文件包含另一个.cpp文件出错的原因以及解决办法
- static void CSample::Function()的定义 出错原因
- 【菜鸟笔记】Ubuntu系统shellscript中 关于for循环以及declare出错的原因
- C# VS 下的 Add Reference 并不一定可靠
- 使用BAK文件还原SQL2000出错的原因
- Android 关于“NetworkOnMainThreadException”出错提示的原因及解决办法
- 无法使用pip命令安装python第三方库的原因及解决方法