VC调试技巧

上传人:宝路 文档编号:2777716 上传时间:2017-07-27 格式:DOC 页数:2 大小:37KB
返回 下载 相关 举报
VC调试技巧_第1页
第1页 / 共2页
VC调试技巧_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《VC调试技巧》由会员分享,可在线阅读,更多相关《VC调试技巧(2页珍藏版)》请在金锄头文库上搜索。

1、1.没有解决的外部定义错误 xyView.obj : error LNK2001: unresolved external symbol public: _thiscall CMyOCRInfo:CMyOCRInfo(void) (?0CMyOCRInfoQAEXZ)可能是由于构造方法 没有实现代码2.没有释放 HBITMAP 句柄造成不能创建位图的问题 2004.8.17 没有及时的释放 HBITMAP 句柄,当创建位图数达到 30 时,出现 8 号错误,即内存不足3.在调试窗口输出信息 TRACE(s);4.如果用向导新建类时只有自定义类型,则可能是因为 .clw 文件没有生成,生成该文件

2、即可5.要注意变量的类型范围,强制转换可能会导致数据溢出;下面的示例将导致死循环:fo r(byte i=0;i256;i+) . .注:由于 byte 类型的表示范围为:0- 255 ,因此 i 永远不可能大于 255 ,所以导致死锁6.没有包含 stdafx.h 导致的错 误:fat al error C1010: unexpected end of file while looking for divcompiled header directive在 .cpp 文件中包含 stdafx. h 文件即可7.避免重复包含头文件#ifndef _INC_PUBLIC_H_3256498713

3、2178947#define _INC_PUBLIC_H_32564987132178947/ 中间写代码.#endif 注:#ifnd ef 可以改为 #if !defined8.出现重复定义错误,例如:d:program file smicrosoft visual studiovc98includedbdaoint.h(33) : error C2011: EditModeEnum : enum type redefinition先检查所有 的 .h 文件中是否定义了 include &qu ot;stdafx.h ,删之再在所有的 .cp p 文件中搜索 stdafx ,看是否重复包含

4、了 stdafx.h 文件,把重复的删掉又如:RefImageDll.obj : error LNK2005: int _cdecl GetCameraRefImageIndexOfID1(class CArray &,int) (?GetCameraRefImageIndexOfID1YAHAAV?$CArrayVCCameraRefImageV1HZ) already defined in InterFaceFile.obj 是因为在 .h 文件中定义了一个函数,且做了完整的实现,因此被多个文件包含时就会出现重复定义错误,解决的方法是把该函数定义成 inline ,这样就不再是一个函数而直

5、接采用一段代码替换了,如:int inline GetAge() return 10;9.类定义不完整,例如:refimagedll.h(14) : error C2236: unexpected class CRefImageListDll一般是因为在该文件包含的文件中存在类定义不完整,例如:calss a int age;后面少了一个分号 ,应该改成:class a int age;10.纯虚类不能生成实例,例如:d:program fi lesmicrosoft visual studiovc98mfcincludeafxtempl.h(201) : error C2259: CKern

6、el : cannot instantiate abstract class due to following members:如下:class apublic: virtual void SetValue(int i)=NULL;class b : public aprivate: int m_iID;public:这样的话,B 也不能实例化,因为在 B 中没有实现 SetValue() 方法,在 B 中实现 SetVa lue() 方法即可解决。正在装载数据 11.重复释放导致的问题 User breakpoint called from code at 0x77f9193c 以上原因是由

7、于释放了一个类的成员,最后在作该类的析构时由于它的成员已经被释放导致出错(该成员 被释放但是没有设 NULL)12.试图执行系统不支持的操作请检查当前窗口模块是否使用了其他不属于它自己的资源13.在 Dll 里调用对话框等资源的方法(如何在动态链接 库中显示对话框) 2006.7.24在动态链接库的显示对话框函数中加入下面这句代码即可:AFX_MANAGE_STATE(AfxGetStaticModuleState();如果需要导出对话框的对象,在外面进行显示,则可以重载 DoModal() 方法,在该方法中加入 AFX_MANAGE_STATE(AfxGetStaticModuleState

8、();14.动态链接库和静态链接库混用的问题症状:使用 LoadLibrary() 加载一个动态链接库时,返回 0 ,函数不成功,调用 GetLastEr ror() 返回结果 126 ,MSDN 如是说:126 The specified module could not be found. ERROR_MOD_NOT_FOUND 经研究发现,是因为该动态链接库采用了静态的方式调用了另一个链接库(B),而另一个链接库则又采用静态的方式调用了另一个动态链接库(C),但是 C 却没有拷贝到程序所在目录,所以导致不能正常加载15.宏定义导致系统出错连出三个错误:ignored on left of

9、 unsig ned char when no variable is declarederror C2143: syntax error : missing ; before constanterror C2106: = : left operand must be l-value 代码如下: byte R=(byte)(ACo lor & 0xFF);如果按照常理,应该不会有问题,但是由于一个函数库里面对 R 有定义,所以 R 便不能当做变量使用16.Debug 版本的 GetDocument() 函数可用,而 Release 版本则不能使用,提示函数没有实现代码检查 .h 文件中最后是否

10、函数如下代码:#ifndef _DEBUG / debug version in LCDModelView.cppinline CXXXDoc* CXXXView:GetDocument() return (CXXXDoc*)m_pDocument; #endif 原理:对于从来都没有调用的函数,可以没有其实现代码,如果含有有一处调用则一定要有其实现代码,微软采用宏定义来区分 Release 和 Debug 版本。17.VC 环境下不能使用 FindF ile 进行文件搜索的问题(刘栋嫣发现,陆宽解决 2007.3.1)在 VC 的集成开发环境下,点击搜索文件按 钮,VC 崩溃检查注册表键:HKEY_CURRENT_USERSoftwareMicrosoftDevStudio6.0SearchOldFIF_InFolders发现其值为一个不存在的目录,导致崩溃,解决办法是清除该键值即可

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号