调试器扩展:原理、实现与应用
1. 多线程同步与应用验证器
在多线程编程中,同步问题可能导致程序崩溃或挂起。应用验证器(Application Verifier)的“Locks”设置可以在应用程序运行时执行一系列测试,能捕获从使用未初始化的临界区到释放包含活动且未释放的临界区的内存等问题。当应用程序包含同步代码时,强烈建议开启此测试设置,因为它能在问题代码执行时捕获问题,而非在问题发生后才发现。
2. 调试器扩展简介
Windows 开发者可用的系统级调试器和工具提供了强大的调试技术,但某些调试任务可能变得重复且易出错,如转储自定义数据结构或查找内核对象的安全设置。为此,微软引入了调试器扩展的概念,它能自动化重复和复杂的任务,提高调试效率。
2.1 核心调试器扩展
调试工具包含一组核心调试器扩展,常见的如下表所示:
| 扩展类型 | 扩展名称 | 描述 |
| — | — | — |
| 通用扩展 | Ext.dll | 包含通用扩展命令,如 error、cxr、std_map |
| 用户模式扩展 | Ntsdexts.dll | 常用于用户模式调试的扩展命令,如 runaway、critsec、threadtoken |
| RPC 扩展 | rpcexts.dll | 用于调试 RPC 的扩展命令,如 authinfo、getcallinfo、rpcheap |
2.2 调试器扩展的基本形式
调试器扩展本质上是一个 DLL,它导出一组入口点。当用户在调试会话中输入与入口点同名的命令时,调试引擎会调用相应的入口点。例如:
<