WinDbg提供了多种方式跟命令来设置断点,以bp及查看跟管理断点。bp, bl, bc以及通过界面操作之前都介绍过,这里将不再详述。这里将主要介绍bd, be, bu命令。


bd: 禁用breakpoint

bd * 所有

bd num1,num2 禁用1,2

禁用后的效果如下,

WinDbg学习笔记四 - 断点


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方法如下,

WinDbg学习笔记四 - 断点


调试DebugSample, 设置断点bp Test!Fun, 因为Test.dll还没加载,bl会显示以下信息,u表示未识别。

WinDbg学习笔记四 - 断点


HMODULE hMod = LoadLibrary(L"Test.dll"); 设置断点,F5运行。


执行完上面这句后,再bl查看,会发现未定的断点现在已经识别了,这个时候就可以调试到这个Fun方法。

WinDbg学习笔记四 - 断点




相关文章: