rDebug _dbg; public void Run() { _dbg = new CorDebugClass(); try { _dbg.Initialize(); // 构造调试环境 // 处理调试事件 } finally { _dbg.Terminate(); } } ... } [MTAThread] static void Main(string[] args) { using(Debugger dbg = new Debugger()) { dbg.Run(); } } } 注意 CLR 调试环境必须在 MTA 的线程套间上下文(Thread Apartment Context)中运行,因此必须将入口函数的 STAThread 属性改成 MTAThread,否则会在调试接口调用回调函数时出现异常。对应于 COM 中的 CoInitializeEx(NULL, COINIT_MULTITHREADED) 调用。 在创建了 ICorDebug 调试接口后,需要针对托管和非托管调试事件,提供调试事件回调接口。可以将实现了调试事件接口 ICorDebugManagedCallback/ICorDebugUnmanagedCallback 的实例,使用 ICorDebug 接口的 S页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] 第2页、共9页 |