常见错误总结
hanyu1980
这个作者很懒,什么都没留下…
展开
-
string和动态链接库——不仅仅如此
动态链接库是一种常用的技术,但是在和string共用的时候,通常会出现一些问题。网络上有一种说法是因为动态链接和静态链接方式不同的缘故。这样的说法经过测试好像是不对的。我测试结果是和使用的库有关。 在测试中,使用了多种组合,发现在动态链接库和exe文件都使用动态链接的运行时库就没有问题了。这个问题究竟出在什么地方呢? 我开始认为是多线程导致string原创 2006-02-07 17:43:00 · 1281 阅读 · 0 评论 -
Singleton模式的静态局部变量的问题
//”TestSingleton.h”class TestSingleton{TestSingleton& Instance(){static TestSingleton myTest; return myTest;}} 这是Singleton的写法,请问有问题么?也许有,也许没有。看你的运气了。这样的做法真是让自己命悬一线。可怕的错不是那种狰狞的错误,而是这样原创 2006-08-17 18:23:00 · 1750 阅读 · 6 评论 -
编译OpenSSL发现的一个错误
今天在编译OpenSSL的openssl-0.9.8d版本时发现一个错误,找到代码以后发现问题比较奇怪在输出OPENSSLDIR宏时发生的错误。我先前编译openssl-0.9.8e的时候没有发现相关的错误,这导致我对OPENSSLDIR产生怀疑。找到这个宏开始怎么也看不出问题来,这个文件是Perl脚本自动生成的。 当时这个宏是这样定义的#define OPENSSL原创 2007-04-25 17:23:00 · 1041 阅读 · 0 评论 -
OPENSSL引起的错误
可能你的机器中搜索libeay32.dll和ssleay32.dll的时候,你得到可能不是一个版本。正常,因为SSL已经被广为应用。大多数程序都习惯使用OPENSSL,但是你是否会考虑,OPENSSL动态库本身可能因为版本的问题产生冲突。我在使用net-snmp和HMP的时候就遇到了这个问题。现象是gc_start调用失败。只要替换对应的DLL文件的版本就可以了。原创 2007-05-09 10:20:00 · 1092 阅读 · 0 评论 -
使用TTS产生的错误
今天在使用TTS的时候遇到了一些错误,总结如下:首先出现的问题是0x101,表示创建TTS句柄出现问题,解决办法是重装TTS Server端。其次的问题是出现0x402,表示网络连接出现异常,解决办法是更新TTS客户端DLL。最后出现的问题是0xE,表示连接超时,解决办法是打开Windows防火墙。原创 2007-08-14 17:20:00 · 6041 阅读 · 0 评论 -
防火墙后使用SVN
下面是我从网上摘抄的一段资料,从上面可以看出来,HTTPS是加密的HTTP协议,他通过SSL作为承载协议,保证应用层的安全性。 为了保护敏感数据在传送过程中的安全,全球许多知名企业采用SSL(Security Socket Layer)加密机制。 SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Nav原创 2007-10-10 17:02:00 · 3169 阅读 · 1 评论 -
最近解决的一个内存泄漏问题
最近解决了一个内存泄漏的问题,问题的起因是在测试过程中施加了极大的压力,以至于CPU的利用率一直维持在100%。此时出现了大量的内存泄漏。 当时从代码中没有找到原因,后来通过其他方面的努力,找到原因如下:当时使用的机制是Windows Post Message。在某个线程中new一块Buffer,通过PostMessage传递到另外一个线程中delete.在100%C原创 2007-10-16 10:06:00 · 987 阅读 · 0 评论 -
不要随便打开namespace
最近在研究ICE,有个同事在使用ICE的时候,出现了编译的二义性。检查以后发现是在stdafx.h中打开了太多ICE的namespace。这里涉及到什么是namespace的问题。使用namespace是为了避免编译空间中存在名字污染的问题。所以在using namespace的时候需要特别谨慎。这意味着在以后的空间中namespace是完全打开的。这也就失去了namespace的保原创 2007-11-06 11:23:00 · 795 阅读 · 0 评论 -
Windbg的使用心得
Windbg是什么?Windbg是MicroSoft提供的应用程序,可以在MicroSoft的官方网站Download。Windbg提供了用户态和核心态的调试能力。 Windbg适用于什么情况? 当你有VS环境的时候,它比Windbg好用;当你要求很苛刻的时候,只能用Dr.watson。当介于两者之间,就用Windbg吧。 使用Windbg还需要什么?Sym原创 2008-02-01 14:40:00 · 2528 阅读 · 3 评论 -
Dr.Watson使用心得
Dr.Watson是Windows中带的错误跟踪查找工具,现在举例说明Windows中它的使用。我使用的OS是WindowsXP SP2,其中已经有了Dr.Watson,但平时并未启动。它的目录位于/Windows/System32下,drwtsn32.exe双击可以启动,做一些设置。drwtsn32.exe –i可以启动Dr.watson对进程的监控。 Dr.Wat原创 2008-02-01 15:52:00 · 1308 阅读 · 0 评论 -
Windows2003修改主机名出现错误
今天在加载一个License的时候,由于和机器名是绑定的,所以涉及到修改机器名的问题。一开始在修改机器名的时候出现错误,为一般性网络错误。解决办法是更换工作组,然后重启计算机,之后修改成功。原创 2007-11-15 18:24:00 · 1926 阅读 · 0 评论 -
ACE版本问题导致编译问题
昨天进行编译的时候出现问题,在于链接Aced.lib出现问题。有一些接口找不到,开始以为是STLPort的版本出现问题,现在看来并不是这样。 原因出现在原有工程下有一个ACE的版本——5.2.x,但链接的lib版本是5.5,导致链接的时候部分函数接口出现错误。解决的办法很简单,就是include和lib用同一个版本ACE进行编译。原创 2007-12-05 15:34:00 · 935 阅读 · 0 评论 -
解决一个Lnk2001的问题
今天解决了一个关于Lnk2001的问题。问题的本身并没有太多值得说的地方,主要是在解决问题的过程中,曾经询问过遭遇过的人,但最后还是通过Google解决乐。所以我发现解决问题最好的地方其实还是Google,不过是少链接一个User32.lib而已,Google知道,而并非人人都知道。原创 2007-12-11 19:57:00 · 922 阅读 · 0 评论 -
让人啼笑皆非的函数指针
今天发现一个Bug,让我哭笑不得。 看下面一段代码: class A{ … int length(); …}int main(){A a;…if(a.length !=date_length) return -1;…}发现什么问题了?你会发现编译器可以正常编译,然原创 2008-03-12 18:11:00 · 713 阅读 · 0 评论 -
RPC远程调用问题
曾经在有一个地方出现这样一件事情,就是RPC调用总是出现错误,当时是两台机器之间的调用,协议使用的是TCP。当时出现这样的问题,原因是网络的不稳定。为了解决该问题,将网卡和交换机上的配置都改为100M自适应。这样就解决了问题。该问题究其根本是因为初始设定是自适应。所以在自适应速率切换的时候,导致网络瞬断。原创 2008-01-03 13:43:00 · 780 阅读 · 0 评论 -
DLL调用问题
当DLL调用时,事实上DLL会被加载到进程空间内运行。如果APP A和其中的调用的DLL B,同时依赖DLL C,则在程序运行时,只会加载一份DLL实例(即使DLL C分别存在于A和B的同级目录),则A和B中面对的C的全局对象都是一致的,可以理解成就是把代码糅合到一起,形成一个大的APP。但如果A和B依赖的DLL名称不同,但内容相同(就是改个名字),则在加载的过程中,会加载两个DLL实例。原创 2008-01-07 20:13:00 · 652 阅读 · 0 评论 -
List引起的系统瓶颈
今天,同事发现了一个系统瓶颈。我们发现在一个需要高速运行的线程中,总是出现缓慢的情况,引起了一系列的问题,这让我们觉得很头痛。今天,我的同事发现了这个问题,原因是在于每次在调用插入队列动作的时候调用了list::size()。可能对STL不是很敏感的人认为这可能并不是一个问题,但如果对STL比较熟悉的话,就会发现这个size调用是非常要命的事情。因为对于List来说,size意味着从原创 2008-04-22 16:31:00 · 848 阅读 · 0 评论 -
Java对象赋值引发的问题
今天,工作中遇到一个问题。同事在Java编写的时候出现一个问题,就是Java有一个队列,然后new出来一个对象,后续操作是不断收到事件然后将对象用operator = 赋值后,加入队列中,这样直接的后果导致队列中的对象是重复的。引发的原因就是因为Java中对象赋值和C++的对象赋值不一样,Java是引用而C++默认是浅拷贝。所以导致了这个问题。因为队列中的对象引用的同一块内存。在使用C++原创 2006-08-02 20:36:00 · 3243 阅读 · 1 评论 -
不要轻易在头文件中打开namespace
今天发现一个错误在编译一个类似于DWORD test(void *list);出现错误,错误竟然是和std::list冲突,吐血。我不能确认这是C++语义的问题还是VC6太土了,但这个问题需要集中避免,我不知道什么会导致这么夸张地问题,结果我找了好些文件。在某个头文件中,发现了using namespace std; 我想它一定难辞其咎。结果我把这一行注释掉,就发现一切OK。所以,这一原创 2006-08-04 18:12:00 · 974 阅读 · 0 评论 -
错误发生原因之首
昨天发生了一个错误,错误的原因非常简单就是因为,没有初始化。《C++编程思想》提出了一个观点,大多数的错误都是因为没有初始化。那么,我们认为C++和C的一个重要区别就是提供了类,而类的出现是为了聚合同类的数据和操作。但为什么会有构造函数和析构函数呢?我觉得这就是C++的哲学了——为了规避初始化之痛。 我们知道局部变量是不会默认初始化的。但对于类来说,我们通常有意识的在原创 2006-02-07 17:58:00 · 1083 阅读 · 0 评论 -
返回值为静态存储区的库函数的多线程问题
我们常常使用一些库函数,很好用,Very nice. 通常这个时候我们就会懈怠,以为是标准了就不会有问题了。 对此,要说不。我的同事给了我一个example – asctime: 我们要深入源码去追查。在asctime.c这个文件中存在着这个函数的实现。static _TSCHAR buf[_ASCBUFSIZE]; 这就是那个静态存储区,也就是说原创 2006-02-07 18:01:00 · 1100 阅读 · 0 评论 -
线程同步与效率的博弈
先前写过一个程序,多线程保护的很好,运行也很稳定,却发现效率非常低。这让我觉得很郁闷。忽然发现世界上的事情往往如此,不过就是稳定和效率的博弈。改了版本后,取消了很多同步的操作,却发现稳定性降低了很多,同样是很郁闷。 前段时间看《Modern C++ Design》,提到的类锁和对象锁的概念,这里面需要注意以下,我用到的一个全局管理对象,它的锁其实就是一个类锁,过多的使原创 2006-02-07 18:06:00 · 1606 阅读 · 0 评论 -
Hotswap,我心中的痛
Hotswap,我曾经三次为此栽过跟头,第一次是刚工作,装了Intel驱动的Hotswap,导致系统蓝屏,当时不知道为什么,重装;第二次是装NMS驱动手按快了,装了,结果在安全模式下删除了;第三次是今天,在工控机上,我以为支持Hotswap,我就装了,结果安全模式进不了,重装机器。吐血!以后决不装Hotswap了,这东东关我屁事。 事情发生三次就不是偶然的了。综合分析原创 2006-02-09 23:29:00 · 1002 阅读 · 0 评论 -
CFileFind之类的问题
在使用CFileFind之类的函数发现一类问题,就是在FindFile之后调用一些成员函数会出现一些莫名的断言不过。这是比较奇怪的问题,在使用了FindNextFile()后,这个问题消失,从MFC上的示例来看,必先调用FileNextFile().仔细一找发现依据了,在MSDN中找到一段:You must call FindNextFile at least once before callin原创 2006-02-07 17:35:00 · 902 阅读 · 0 评论 -
静态成员函数不能调用普通成员变量
这是个人人都知道的小问题,今天却折腾了心浮气躁的我20分钟。 就这么一点错误。静态成员函数是类共享的函数,而普通成员变量则是类所独有的,所以在静态成员函数中调用普通成员变量,最起码直接调用是不可以的。 这是一个小问题,但遇事要慢慢来,不要急。写这篇Blog最主要要提醒自己,凡事必有因,不要着急。原创 2006-02-07 18:02:00 · 3559 阅读 · 1 评论 -
是否可以因为时间紧而放松Design
在上一个项目中,得到一个惨痛的教训——系统的可扩展性不是随便就能够小视的。上一个项目的时间很紧,所以我在考虑架构的可扩展性上下了功夫,现在如果加上什么NetManage之类的应用并不是很困难。但是这次修改的焦点集中在展示的流程方面。老实说,这个地方的可扩展性,我考虑的不是很充足。 当初设定系统配置的出发点是加深运维人员对语音流程的理解,所以将按照流程来分组配置。这样,原创 2006-02-07 18:04:00 · 745 阅读 · 0 评论 -
strncpy和memcpy辨析
char * __cdecl strncpy ( char * dest, const char * source, size_t count ){ char *start = dest; while (count && (*dest++ = *source++)) /* c原创 2006-02-07 17:54:00 · 1135 阅读 · 0 评论 -
思维定式
这次出去遇到一个问题,折腾了很久,结果发现是个非常容易解决的问题,问题本身只是个案,没有追述的意义。需要值得检讨的是,在解决问题的过程中,出现了思维定式。 谁说呼叫一定要从seize call开始?事实上很多问题不要想得太复杂,想最简单最直接的办法去解决问题才是关键。通过绕很多弯子无助于问题的正确解决。 真正的敌人其实是自己的思维习惯!原创 2006-03-02 20:58:00 · 718 阅读 · 0 评论 -
ACE Link gettimeofday的错误
今天在使用ACE_OS:: gettimeofday的时候,在Debug版本上编译正常,但是在release版本上出现编译问题。我上网查了一下,可能是与run-time library有关。于是检查这一选项,果然发现问题。在Release的时候选用了Debug Mutithreaded DLL,把这一项改成Mutithreaded DLL就编译通过。由此导出一项注意,在ACE编译的时候,一定要搞定原创 2006-08-30 15:34:00 · 1852 阅读 · 0 评论 -
运行时库的配合问题
今天在编译工程的时候出现链接错误,主要的原因还就是在引用运行时库的问题。那么引出一个好像平时不是特别多人注意的问题。在一个比较大的工程中,常常包含很多静态库和动态库。但编译的时候经常通不过,就细节而言,往往是因为引用的库和当前工程的运行时库不吻合,那么在Windows下比较重要的问题就是使用统一的运行时库,并且将Debug和Release分开,区别对待。原创 2006-08-30 16:59:00 · 835 阅读 · 0 评论 -
经验一定是正确的么
一转眼工作已经一年了,算得上有了一点经验。对我来说,对个人的发展好像到达了一个坎上,如果能顺利迈过这个坎,今后还能快速成长,如果不能今后就庸庸碌碌了。 我觉得比较重要的一点是要正确看待目前拥有的经验。昨天发生一件事情,我在重装NMS驱动的时候,发现CT Daemon无法启动。按照经验,我花了很长时间重装驱动,但是依然没有能解决问题。这时候是经验失效了。后来发现,由于NA20原创 2006-05-18 15:26:00 · 1052 阅读 · 0 评论 -
数组越界不等于异常
察看如下代码:struct TestStruct { char str[8]; int i;};char str[8] ="abcdefg";TestStruct test[2]={0,1};for(int i = 0 ;i{test[i].i = i+1; printf("&test[%d] = 0x%X/n",i,原创 2006-06-01 20:17:00 · 2938 阅读 · 3 评论 -
常识性逻辑错误
常识是世界上最可怕的事情,在莱特兄弟之前,常识是人类是不能飞的,因为人类的密度大于空气的密度。今天遇到一个问题就是常识性错误:int nRet = SendMessage(pBlock);if(nRet ==0){ nRet = pEvent->wait(&waittime);if(nRet>0){//未超时}else{//超时}原创 2006-11-07 15:23:00 · 1059 阅读 · 0 评论 -
RTP不通是因为没接网线
写这篇Blog很感慨,因为昨天工作上遇到了SIP接不通的情况,作为一个开发人员,我觉得比较好的地方是我丝毫没有怀疑我的代码出现问题.我当时怀疑的问题是参数的配置,可能某一个参数存在这样那样的问题,但事实上这些都不是.原因是没有插上网线.今天一开始就想骂人,很愤怒.很实事求是的说,我在面对大压力下,没有足够的冷静.昨天给了我差不多一个小时,但在这一个小时之内,我检查了若干种可能性,但没有具体对硬原创 2006-07-02 15:02:00 · 984 阅读 · 0 评论 -
DLL版本控制引起的困惑
最近在作一个测试的时候遇到这样一个问题,问题的起因表现是系统启动失败,我找了很多的原因也没有找到什么结果.我所做的努力包括核实软件环境,硬件环境和代码本身.但问题出在了引用的DLL上,在程序的本目录上包含了旧版本的DLL,而当APP更新的时候引用的是新的应用程序的时候就会出现问题.我花了将近48小时来查找这个问题,这让我觉得教训深重.这是一个关于NMS的MSPP的绑定失败的问题,但内在是各种层次的原创 2006-07-05 18:49:00 · 1715 阅读 · 0 评论 -
越简单越复杂
从技术实现的角度,很多人喜欢用一些现成的技术,觉得能够快速解决问题,也许问题的出发点是对的。但从我的角度来说,我不是特别信任一些开源技术,并非对开源作者的不尊重,反而我认为问题出在使用开源的人身上。很多人就是追求一个快,以至于不在乎别的一些什么细节上。但在遇到问题的时候,这是非常危险的行为,很多问题无法去快速排除。通常多花点力气,总是没有太多坏事的。原创 2009-04-24 17:19:00 · 1510 阅读 · 0 评论