1. VS2005调试时和Spy++冲突
_CRTIMP void * __cdecl _decode_pointer(void *codedptr)
{_ptiddata ptd;
PVOID (APIENTRY *pfnDecodePointer)(PVOID) = NULL;
if (
#ifndef _M_AMD64
(FLS_GETVALUE == NULL) ||
#endif /* _M_AMD64 */
__flsindex==0xffffffff ||
(ptd = (_ptiddata)FLS_GETVALUE(__flsindex)) == NULL)
{
// cached function pointer is not available - look it up the traditional way
HINSTANCE hKernel32 = GetModuleHandle(_KERNEL32);
....
}
}
查看Output后发现,输出内容有“
'XXXXXXXX.exe': Loaded 'C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\spyxxhk.dll', No symbols loaded.
First-chance exception at 0x7718d07e in XXXXXXXX.exe: 0xC00000FD: Stack overflow.
'XXXXXXXX.exe': Unloaded 'C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\spyxxhk.dll'
"
再看我的桌面,我的SPY++是出于开启状态的,待我将SPY++关闭后,就可以正常调试程序了。就这样,搞定。
2. MFC链接dll时,伪内存泄漏错误。
参考1:http://blog.youkuaiyun.com/clever101/article/details/7926541
参考2:http://blog.youkuaiyun.com/dreamcs/article/details/7924772
参考3:http://blog.sina.com.cn/s/blog_68357baf0100ujxx.html
其中参考1给了方法:
步骤为:
a. MFC的使用中从原来的“在共享DLL使用MFC”改为“使用标准Windows库”
b. 增加预处理器:_AFXDLL
c. 在附件依赖项中增加MFC库,具体填哪个MFC库根据你的情况而定,如多字节字符集下debug编译,就填mfc90d.lib ( VS2008环境下),其它的据情况选择mfc90.lib、mfc90ud.lib或mfc90u.libd
我很认真的安装这3个步骤尝试了一下,最后发现当我只用步骤c的时候就已经解决问题了。
3. LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
今天使用libevent1.4.5,编译它自带的例子client_test就出现这个warning,经过BAIDU后发现
"msvcrt.lib是VC中的Multithreaded DLL 版本的C运行时库,而libcmt.lib是Multithreaded的运行时库。在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文 件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。"
然后我检查了一下libevent和client_test的设置,发现libevent是Multi-threaded Debug (/MTd);而client_test却是Multi-threaded Debug DLL (/MDd),这2个不统一,故有此错误。
我将libevent也修改为Multi-threaded Debug DLL (/MDd),就没有该Warning了。。。