.NET框架源码解读之SSCLI的调试支持

阅读源码一个比较快的手段就是在调试器里阅读,这样可以在实际运行SSCLI的过程中,通过堆栈跟踪的方式查看完整的程序执行路径。

当在SSCLI环境里执行一个托管程序的时候,堆栈上通常有托管和非托管代码同时在执行。因此在SSCLI里也支持下面几种调试场景:

  • 调试托管程序:在SSCLI里自带了一个托管调试程序,cordbg.exe。跟调试普通.net程序不同,目前还无法在Visual Studio里调试SSCLI环境下的托管程序,在后面有时间的时候,我们会看一下如何在Visual Studio里添加调试SSCLI托管程序的支持。
  • 调试非托管程序:即调试SSCLI虚拟机本身的非托管代码,可以使用Visual Studio、WinDbg等普通Windows调试工具进行调试。在非Windows平台下,也可以用gdb这些工具进行调试。
  • 托管非托管程序混合调试:可以Visual Studio和Windbg这些Windows调试工具下通过加载sos调试插件来实现混合调试的功能。另外,sscli也提供了sos调试插件的源码。

SSCLI里的符号文件

在SSCLI里,会生成两种符号文件,一种是编译非托管程序生成的.pdb文件,一种是编译托管程序生成的.ildb文件。关于符号文件的作用,请参看我之前的文章:Visual Studio调试之符号文件

Windows调试工具调试都支持.pdb文件,而cordbg.exe可以识别.ildb格式,而sos插件不需要任何符号文件即可调试。

SSCLI提供了工具ildbconv程序可以在.pdb文件和.ildb文件格式之间相互转换,因此如果要在Visual Studio里调试SSCLI里编译的托管程序,可以用这个工具将对应的.ildb文件转换成Visual Studio支持的pdb格式,并在.NET环境下运行托管程序即可调试。ildbconv命令的格式如下:

ildbconv [选项] 符号文件路径

其中ildbconv支持下面这些选项:

  • /toildb:将.pdb文件转换成.ildb格式;
  • /topdb:将.ildb文件转换成.pdb格式。

SSCLI也提供了ildbconv程序的源码,其路径位于:\tools\ildbconv\ildbconv.cpp

转载于:https://www.cnblogs.com/vowei/p/4309586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
源码简介:Microsoft 发布了 sscli 2.0,所谓的 sscli 就是 Shared Source CLI。基本上是 .NET Framework 2.0 的 Microsoft 实现,当然是实际发布的 .NET Framework 2.0 的一个简化版本。 sscli 2.0 包含很多有趣的东西,包括: 01、vm - 包含了 CLI 核心实现,包括垃圾收集器、类装入器、类型系统、错误报告系统、应用程序域、配件、代理支持、反射、安全性和代码管理器。 02、csharp - 包含了使用 C++ 编写的 C# 编译器(csc.exe)和配件连接器。 03、classlibnative - 包含了公共类型和国际化例程。 04、ipcman - 包含跨进程通讯系统的源代码。 05、managedlibraries - 包含Remoting 和 SoapSerializer 的源代码。 06、utilcode - 包含被运行时、工具和 C# 编译器使用的核心例程,例如路径处理和分析、数组和散列表管理、C 运行库、字符大小写支持、库和配件载入、调试和日志支持、同步机制,还包括字符串格式化、GUID创建、错误处理、注册表以及配置访问等。 07、md - 包含元数据的读取器和编写器。 08、fjit - 包含 sscli JIT 编译器和验证器。 09、fusion - 包含配件绑定、策略检查和全局配件缓存的实现代码。 10、bcl - 包含 ECMA 基础类库的 C# 代码,包括大部分 System 名字空间下的代码。 11、debug - 包含运行时调试器的源代码。 12、ilasm - 包含 CIL 汇编器的源代码。 13、ildasm - 包含 CIL 反汇编器的源代码。 14、tools - 包含 PEVerify、clix.exe、metainfo.exe、托管调试器符号的读写器以及其它工具的源代码。 15、toolbox - 包含 caspol、strike 等其它工具的源代码。 16、dlls - 包含在构建过程所需要的本机共享库。 17、xmlparser - 包含 XML 分析器的源代码。 18、fx - 包含主要名字空间类的实现,包括正则表达式、XML和网络等。 19、jscript - 包含了使用 C# 编写的 JScript 编译器。 20、pal - 包含了平台适配层(PAL)的实现,包括 unix 和 win32 两个平台。 21、palrt - 包含 PAL 运行时的实现。 22、samples - 示例。 23、tests - 大量的测试用例和套件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值