一
assert->程序正常运行,不会出现的情况-- 一定是bug
----------------------------------------------------------------------------------------------------------
二
trace->会出现的情况,但可能是bug
----------------------------------------------------------------------------------------------------------
三
exception ---------- C++异常用引用捕获-----------MFC异常用指针捕获 catth(CException *e)
{
//handle eg:e->ReportError();
e->Delete();
}
----------------------------------------------------------------------------------------------------------
四
调试:1,本地 debug调试
2,本地 release调试,带(pdb文件)
3,远程 debug调试
4,远程 release调试,带(pdb文件)
5 事后 DR.Wasion 日志调试(vista之后被 问题报告和解决方案 替代)
6 事后 windows 98 崩溃对话框 调试
五
windows 错误码
watch中,@ERR(错误编号) 或者 @ERR,hr(错误描述)
六
PE文件:利用了内存映射文件,exe最佳虚拟地址0x00400000;dll可能没有最佳虚拟地址,所以采用相对虚拟地址(RVA),重定位
简介:
1.MS-DOS(MZ)头部------0x0000--MS-DOS兼容,末尾e_lfnew标志PE头文件偏移位置
2..MS-DOS实时模式残余程序
3.PE文件标志
4.PE文件头
5.PE文件可选头部------初始的堆栈大小、程序入口点的位置、首选基地址、操作系统版本、段对齐的信息等等
。。。这里是段表
6..text段头部------------------------0x1000
7..bss段头部
8..rdata段头部
9.......
10.debug段头部
11..text段-----可执行代码段
12..bss段------数据段
13..rdata段------数据段
......
14..debug段 调试信息段
PE文件详解 上 http://www.vckbase.com/document/viewdoc/?id=1334
下http://www.vckbase.com/document/viewdoc/?id=1335
七
DLL重定位与绑定(见windows核心编程)
八
反汇编
九
PDB文件(需要设置工程)
vcx0.pdb(vc100.pdb),分离的pdb文件,最好不用分离的,也就是没有vc100这个文件
十
debug允许有4个字节的上/下越界,而在release中会崩溃
十一
vc调试器
1
debug->breakall菜单,调试死循环(或者性能很慢的时候,较大几率定位到问题代码)
2
alt+8(反汇编),右键->set next statement 设置下一条执行的语句,只能在本函数内使用
3
set next statement 3可以用来产生错误,用来调试处理错误的代码是否正常运行
4
spy++进行消息调试-s p r(send,post, return)
十二
内存调试
十三
多线程调试