windbg

1. 使用adplus.exe捕获crash,下列命令的前提是程序已经运行

C:\Program Files\Debugging Tools for Windows (x64)

adplus -crash -pn DumpTest1.exe -o ./



2. First Chance Exception and Second/Last Chance Exception

对于First Chance Exception和Second/Last Chance Exception,这些都只会出现于调试器中。前者意味着被调试程序确实产生了一个异常,如果被调试程序自己处理掉了这个异常,那么就不会出现Second/Last Chance Exception的提示,反之如果没有处理则出现Second/Last Chance Exception的提示;如果是一个正常执行的程序,Second/Last Chance Exception意味着这个程序的终止运行

3. 设置系统允许堆栈调试


C:\Program Files\Debugging Tools for Windows (x64)

Gflags.exe -i excel.exe +ust



4. 设置系统符号路径

路径c:\symbol 要真实存在

SRV*C:\symbol*http://msdl.microsoft.com/download/symbols;


保存工程,下次不需要再设置

5. 堆的分配

new出来的内存是分配在堆上, 那一个进程里究竟有多少个堆, 每个模块都有自己单独的堆吗?

实际上一个进程可以有任意多个堆,我们可以通过CreateHeap创建自己单独的堆, 然后通过HeapAlloc分配内存。 我们new出来的内存是crt(C运行库)分配的, 那就涉及到crt究竟有多少个堆了?

crt有多少个堆由你编译每个模块(Dll/Exe)时的编译选项决定, 如果你运行库选项用的是/MD, 那就和其他模块共享一个堆; 如果用/MT, 那就是自己单独的堆。

大部分情况下我们会用/MD,这样我们在一个模块里new内存, 另一个模块里delete不会有问题, 因为大家共享一个堆。

你可能感兴趣的:(DB)