WinDbg提供了多种方式跟命令来设置断点,以bp及查看跟管理断点。bp, bl, bc以及通过界面操作之前都介绍过,这里将不再详述。这里将主要介绍bd, be, bu命令。
bd: 禁用breakpoint
bd * 所有
bd num1,num2 禁用1,2
禁用后的效果如下,
be: 启用breakpoint, 格式类似于bd
bu命令表示设置未定断点,表示所在模块还没有加载到内存中。用bp的时候,如果找不到符号,也会自动变成bu。当模块加载的时候,会尝试再次识别这些未定断点。
下面用一个小例子来演示下bu如何使用。
新建一个library project - Test, 代码如下:
extern "C" __declspec(dllexport) int Fun(int i)
{
return i * 2;
}
注意一定要有extern "C",否则在生成的DLL里名字会发生改编。
修改DebugSample的main方法如下,
调试DebugSample, 设置断点bp Test!Fun, 因为Test.dll还没加载,bl会显示以下信息,u表示未识别。
在 HMODULE hMod = LoadLibrary(L"Test.dll"); 设置断点,F5运行。
执行完上面这句后,再bl查看,会发现未定的断点现在已经识别了,这个时候就可以调试到这个Fun方法。