Debugging Tools for Windows |
WinDbg、CDB和NTSD也可以对包含托管代码的目标程序进行有限制的调试。
托管代码是和Microsoft .NET 公用语言运行时(CLR)一同执行的代码。.NET CLR 管理程序的原始代码和数据,并且提供类似垃圾回收和平台无关代码这样的高级支持。
需要该运行时的编译后代码称为托管代码。不需要该运行时的代码成为非托管代码。只包含托管代码的应用程序称为托管应用程序。
托管的.NET应用程序可以在支持.NET CLR 的任何平台上运行,因为编译器生成的二进制代码是平台无关的。托管程序中的二进制代码是Microsoft中间语言(Microsoft intermediate language (MSIL))。这种二进制代码还包含对象信息和其他引用(称为元数据)。
托管应用程序和传统的应用程序有所不同,因为很多程序执行的细节是在运行时决定的,例如数据结构如何分布和本地代码如何生成和使用。当这种程序执行的时候,运行时决定程序运行的数据使用和代码使用,生成和平台相关的本地代码。从MSIL产生本地代码的过程称为托管或just-in-time (JIT) 编译(有时也称JITting)。运行时用来进行这种翻译的组件成为JIT编译器。
当JIT编译器为某个方法编译了MSIL后,该方法的存根被编译后代码的地址取代。不管之后这个方法什么时候被调用,执行的都是本地代码,而JIT编译器不需要再重复这个步骤。
可以使用各个软件厂商提供的各个编译器来构建托管代码。特别是,Microsoft Visual Studio .NET可以使用4种不同语言来生成托管代码:
默认的,Microsoft Visual C++ .NET不会构建托管应用程序。必须通过图形界面或命令行开关来指定这样的构建。
可以使用Sos.dll 扩展来调试托管代码。该扩展在Windows调试工具包安装目录的\clr10 子目录下。
要使用该扩展,可以加载它之后输入!clr10\sos.help。
该命令会列出所有可用的扩展命令和它们的参数。