ICANN认证国际域名顶级注册机构
网站建设,域名注册,空间租用,软件销售,广告设计 域名注册,空间租用, 网站建设,东莞网页设计,域名注册,网站推广,网站开发,网页设计 网站推广,,百度推广,新浪推广,雅虎推广,网易推广 标志设计,画册设计,包装设计,VI策划,企业形象顾问 连邦软件加盟店,提供销遥行,管家婆,速达,用友ERP,诺顿等软件报价及销售 建站必读 腾达网络,上网帮助中心, 腾达为东莞等地,提供网站建设,网站推广,广告设计,软件销售等优质服务!
建站必读


 
 
当前位置:首页 -> 建站必读 -> .NET技术
CLR 调试接口的架构与应用 [3] 调试事件
在上一节中简单介绍了 CLR 调试器的框架结构,其中提到 CLR 调试环境同时支持 Native 和 Managed 两种模式的调试事件。这一节将从整体上对调试事件做一个概括性的介绍。





首先看看 CLR 通过 ICorDebugManagedCallback 回调接口提供的 Managed 调试事件。这部分的调试事件可以大致分为被动调试事件和主动调试事件:前者由 CLR 在调试程序时自动引发被动调试事件,如创建一个新的线程;后者由调试器通过 CLR 的其他调试接口,控制 CLR 调试环境完成某种调试任务,并在适当的时候引发主动调试事件,如断点和表达式计算。



就被动调试事件来说,基本上对应于 CLR 载入运行程序的若干个步骤



首先是动态环境的建立,分为进程、AppDomain和线程三级,并分别有对应的建立和退出调试事件:





以下为引用:



interface ICorDebugManagedCallback : IUnknown

{

//...

HRESULT CreateProcess([in] ICorDebugProcess *pProcess);

HRESULT ExitProcess([in] ICorDebugProcess *pProcess);



HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess,

[in] ICorDebugAppDomain *pAppDomain);

HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess,

[in] ICorDebugAppDomain *pAppDomain);



HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugThread *thread);

HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugThread *thread);



HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugThread *pThread);

//...

};











在 CLR 的实现上,实际上是存在有物理上的 Native Thread 和逻辑上的 Managed Thread 两个概念的。进程和 Native Thread 对应着操作系统提供的相关概念,而 AppDomain 和 Managed Thread 则对应着 CLR 内部的相关抽象。上面的线程相关调试事件,实际上是 Native Thread 第一次以 Managed Thread 身份执行 Managed Code 的时候被引发的。更完整的控制需要借助后面要提及的 Native Thread 的调试事件。

此外 AppDomain 和 Managed Thread 在创建并开始运行后,都会根据情况改名,并调用 NameChange 调试事件,让调试器有机会更新界面显示上的相关信息。





其次是静态 Metadata 的载入和解析工作,也分为Assembly, Module和Class三级,并分别有对应的建立和退出调试事件:





以下为引用:



interface ICorDebugManagedCallback : IUnknown

{

//...

HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugAssembly *pAssembly);

HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugAssembly *pAssembly);



HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugModule *pModule);

HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugModule *pModule);



HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugClass *c);

HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugClass *c);

//...

};











在 CLR 中,Assembly 很大程度上是一个逻辑上的聚合体,真正落实到实现上的更多的是其 Module。一个 Assembly 在载入时,可以只是保护相关 Manifest 和 Metadata,真正的代码和数据完全可以存放在不同地点的多个 Module 中。因此,在 Managed 调试事件中,明确分离了 Assembly 和 Module 的生命周期。





然后就是对 IL 代码中特殊指令和功能的支持用调试事件:





以下为引用:



interface ICorDebugManagedCallback : IUnknown

{

//...

HRESULT Break([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugThread *thread);



HRESULT Exception([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugThread *pThread,

[in] BOOL unhandled);



HRESULT DebuggerError([in] ICorDebugProcess *pProcess,

[in] HRESULT errorHR,

[in] DWORD errorCode);



HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain,

[in] ICorDebugThread *p
 
 
本站关键词:
|东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件||东莞主机申请|东莞空间申请|横沥网站建设网页制作|常平网站建设网页制作|虎门网站建设网页制作|厚街网站建设网页制作|长安网站建设网页制作|石龙网站建设网页制作|东坑网站建设网页制作|东莞专业网络公司|东莞速达软件|东莞财务软件|
域名注册 | 虚拟主机 | 网站建设 | 网站推广 | 广告设计 | 帮助中心 | 软件中心 | 关于腾达
东莞市腾达信息工程有限公司      本站网络实名: 东莞网站建设
地址:东莞市新城市中心区第一国际B座610   邮编:523007
电话:0769-22026071 22026072 传真:0769-22026076 24小时服务热线:13712032014
© 2002~2005 腾达网络   版权所有