本人工作中遇到的一些bug解决经验,有些是本人所在公司所用特定的技术才会遇到的问题,这部分可以忽略,MFC和WINDOWS方面的还是有一定参考价值。
1.EraseBk()函数不响应,没有加初始化函数.
2.加载图片是白板,初始化函数里的语句有问题.
3.子窗口在父窗口外面,或者移子窗口位置大小子窗口不听话,是因为子窗口属性没有设置为Child.
子窗口不能被拖动,是因为style属性没有被设置为:popup.
4.DDX_Control函数崩溃,不识别控件的ID,可包含Resource.h头文件解决.
5.滚动条不停闪动,是因为默认焦点在那上面.把焦点移走即可解决.
6.按钮从画的背景图片中透出来,是因为背景在不断的刷新,可检查是否有Timer函数中在进行刷新的动作.
问题在于先重绘按钮,再重绘底图,导致按钮从底图中透出来,可再次手动重绘按钮解决此问题.
7.窗口背景图片不显示,是因为在初始化函数中进行了擦除,而类中却没有EraseBknd()函数.
8.背景图片背景全黑,是因为XML文件中没有设置背景为透明.
9.代码中对控件位置的设置无效,可能是没有将变量和控件绑定
10.一个控件被其他控件遮住,可强制重绘这个控件解决此问题.
11.滚动条突然滚出一个很大的数字,是因为用了: a += (-scollinfo.npos);不用+=,直接赋值就无此问题.真尼玛奇葩的bug.其实是数学计算上的问题,自己当时想多了.
12.DDX_Control函数崩溃,无提示,可能是父窗口和子窗口出现同样ID的控件,导致冲突.之前删除的按钮运行时依然出现,可重新全部把解决方案生成一遍以解决此问题.
13.radiobutton,读取XML文件,图片扭曲,是因为控件高度太小,图片和文字错位,是因为控件高度太低.
14.重定义默认参数,编译不通过.函数在头文件中给了默认参数,在源文件中就不能再设默认参数.
15.CWnd窗口创建失败,可能是由于资源问题,即资源视图中的对话框资源路径没有被找到.必杀技,Create()函数前加:AfxSetResourceHandle(GetModuleHandle(NULL));
16.窗中绘图扭曲,可能是由于主窗口的尺寸(代码中的尺寸,和XML中的尺寸),以及绘制的主背景图的尺寸不统一的原因.
17.OnEraseBknd()函数,绘制不出来,CDC的问题.DrawText(多字节)可能导致崩溃.
18.char数组,最后一位必须是'\0',否则会溢出;
19.combobox下拉框高度被限死,在资源视图中,把下拉框高度拉一下就行.
20.XML背景图边角切割无效, 是因为切割色和背景色没有同色.
21.SVN清理失败,可能由于SVN目录下有exe程序在运行.关闭即可清理成功!
22.加载的dll文件是release版的,运行时采用debug模式,将会调用不到dll文件.
23.tab键顺序只与rc文件中控件的代码顺序一致.且在SetWindowPos中不能添加SWP_NOACTIVE参数,才能正确实设置tab键顺序.
24.对话框的析构函数崩溃,首先可能是析构里面的成员时崩溃,可先检查里面的成员.如果是成员对话框,再检查成员对话框里面的成员.
25.用VC.NET新建工程时,总是报告出:“automation服务器不能创建对象”错误.
不能新建工程可不行,也许是自己在优化系统的时候关掉了某些服务的缘故?从控制面板打开服务列表看了看,没觉的有,后来到网上一查,很多人都碰到了这个问题,解决办法只要打开“开始”,在“运行”里输入: regsvr32 scrrun.dll, 然后回车就搞定。刚开始时在百度里却没有搜到该问题的内容,郁闷!
26. 分析因加载动态库遇到的link错误时可以考虑从以下几方面入手:
1、调用的类、函数是否只有声明没有定义
2、调用的类或者函数、变量是否export
a:是否显示写上__declspec(dllexport)
b:在dll导出的类等文件较多时,确认是否加载到dll工程编译(我犯的错误)
3、调用的类、函数或者变量在当前工程中应该为__declspec(dllimport)
通过上面的检查基本上就可以定位因调用dll库带来的link错误!
27.用函数指针的时候, 声明函数原型前面要加上typedef, 否则编绎不过.
28.结构体中如果包含有函数,刚初始化时不能内存置零,否则函数指针变为空,无法调用.
29.程序不报错,无反应,可能是陷入死循环.也可能消息在转发过程中被中断了,可查看PretranslateMessage或者其他的与消息转发相关的函数,看是否有消息被中断.
30.调试运行找不到某dll文件或者其他文件,可查看工程属性中,输出目录路径是否被改变.
31.有符号数和无符号数做四则运算时,二者都按有符号数计算.
有符号数和无符号数做大小比较时,二者都按无符号数计算.
32.ADO 错误:0x80040e07,从数据类型 char 转换为 int 时出错。答: 这是因为调用存储过程时参数传少了.存储有一个varchar型的参数没有传.
33.在棋乐融融框架中,如ToolTip不能显示,则可能因为先设置了控件的位置,后创建控件.顺序错误导致此显示bug
34.一个dll中的类不要绑定另一个dll中的窗口资源,否则会出现内存无法读取等导致程序崩溃的未知错误.
35.CListCtrl重绘表头,必须在CListCtrl的OnCreate函数中绑定自绘的表头,且OnCreate函数必须被调用,否则自绘表头无效.
36.DoDataExchange()方式创建控件,对应OnSubWindow()函数,Create方式创建控件,对应OnCreate函数.
37.读取内存0x000000出现错误,该内存不能为read/write,有可能是栈溢出,类中的成员变量太多了.
38.对子窗口调用SetWindowPos不起作用,是因为子窗的style属性没有被设置为child
39.新工程若引用网狐的皮肤库,皮肤控件,界面控件,SkinLite三个库都要引入(头文件,静态库,动态库),否则运行时要出错.
40.ADO 错误:0x800a0cc1,在对应所需名称或序数的集合中,未找到项目。这种情况一般是查询的结果集中,没有该字段。需要检查存储过程的逻辑,是否所有的返回路径都能保证查询到相应字段的值。
41.https打头的网址打不开的解决方法:IE浏览器的工具-Internet选项-高级中,勾选: 1.使用SSL2.0 2.使用SSL3.0 3.使用TLS1.0 4.使用PCT1.0(IE6没这个选项) 这四个复选框。
因为与https打头的网站上的数据交互,需要SSL加密。这四个复选框表示支持此功能。