沃德软件技术资讯频道

传递网站建设与软件开发资讯

C#\JAVA\IOS\Android等技术研究

Ajax+DIV+CSS技术技巧/HTML5研究

视觉设计、软件体验度与流行趋势

沃德软件团队经验与心得体会分享

门户网站设计有很多种。最为国人熟知的是像迅雷看看、新浪、腾讯网那种信息类门户。现在也有博客门户等。...[详细]
软件开发

引发Windbg软件异常的常见原因

发布:昆明沃德软件 发布时间:2024-11-01  浏览次数:47
更多
1、变量未初始化:
 
0xCCCCCCCC - 栈内存示初始化
 
0xCDCDCDCD - 堆内存未初始化
 
0xFEEEFEEE - 堆内存已经被释放、其他异常
 
2、死循环
 
for/while死循环
 
消息触发的函数调用上的死循环:和服务器交互的消息触发的、Windows窗口消息触发的
 
3、内存越界
 
全局内存越界
 
栈内存越界
 
堆内存越界
 
4、内存泄漏 
 
malloc后没有free
 
new后没有delete
 
5、空指针与野指针
 
空指针(指针变量值为0)
 
野指针:指针指向的内存已经释放,还去访问、同一段堆内存释放了两次
 
6、内存访问违例
 
读访问违例:
禁止读64KB内存区
用户态的代码不能访问内核态的内存
读已经释放的内存
 
写访问违例:
禁止写64KB内存区
向已经释放的内存写数据
向不相关内存写数据
用户态的代码禁止向内核态内存写数据
 
7、栈内存不能使用delete/free去释放,栈内存会自动释放
 
8、线程栈溢出
 
函数递归用层次过深-减少递归尝试
 
函数局部变量占用内存过大-使用堆内存
 
switch-case语句中case分支过多-拆分到函数中
 
多个函数之间的死循环调用-掐断死循环调用
 
9、函数调用约定不一致导致的栈不平衡
 
_cdecl C 调用
_stdcall 标准调用
_fastcall 快速调用
 
10、库与库之间不匹配
 
底层库的API头文件没发布,上层用的是老的头文件
 
底层库的API头文件发布了,但底层库没编译通过
 
11、new操作失败的原因
 
申请的内存过大,进程中没有这么大的内存了
 
用户态的内存达到了上限,申请不到内存了
 
进程中的内存碎片过多
 
发生堆内存越界,导致堆内存被破坏,导致new操作产生异常
 
12、堆内存被破坏,导致程序“胡乱”崩溃
 
13、执行new操作时产生的异常
 
内存不足,导致new时抛出异常
 
堆内存被破坏,导致new时发生异常
 
14、执行delete操作时产生异常
 
同一段内存被delete两次,第一次崩溃
 
堆内存被破坏,导致delete时发生异常
 
15、GDI对象泄漏
 
长时间泄漏会接近或达到Windows单位进程的GDI总数上限
 
16、对类对象进行memset操作引发异常
 
类对象中有虚函数表指针
 
类对象中有维护内部内存结构的内存
 
结构体成员中包含类对象
 
17、程序招聘异常,将接下来的代码都跳过去了
 
该执行的代码没执行,导致代码逻辑出异常
 
18、注入库注入到进程中,导致进程异常
 
输入法模块注入-卡死或崩溃等
 
安全软件的模块注入-内存泄漏等
 
VPN软件的注入-崩溃等
 
19、函数调用覆盖了系统API调用时设置的lasterror值
 
20、格式化符与参数不一致
 
格式化符与对应参数的类型不一致
 
压到栈上的数据与格式化符不对应
 
21、软件在不同系统中运行可能表现不一样,要在多个系统中做兼容测试