.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
.NET框架源码解读之SSCLI的调试支持的更多相关文章
- .NET框架源码解读之SSCLI编译过程简介
前文演示了编译SSCLI最简便的方法(在Windows下): 在“Visual Studio 2005 Command Prompt”下,进入SSCLI的根目录: 运行 env.bat 脚本准备环境: ...
- .NET框架源码解读之启动CLR
前面提到在SSCLI环境里运行.NET程序的时候,执行的命令类似java程序的执行过程,即通过clix程序解释执行.net程序.这个过程看起来跟在windows环境下执行.net程序表面上看起来不一样 ...
- .NET框架源码解读之MYC编译器
在SSCLI里附带了两个示例编译器源码,用来演示CLR整个架构的弹性,一个是简化版的lisp编译器,一个是简化版的C编译器.lisp在国内用的少,因此这里我们主要看看C编译器的源码,源码位置是:\ss ...
- .NET框架源码解读之准备CLR源码阅读环境
微软发布了CLR 2.0的源码,这个源码是可以直接在freebsd和windows环境下编译及运行的,请在微软shared source cli(http://www.microsoft.com/en ...
- jQuery框架源码解读
1.jQuery 1.9.1 parseJSON: function( data ) { // Attempt to parse using the native JSON parser first ...
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...
- Restful 1 -- REST、DRF(View源码解读、APIView源码解读)及框架实现
一.REST 1.什么是编程? 数据结构和算法的结合 2.什么是REST? - url用来唯一定位资源,http请求方式来区分用户行为 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下 ...
- SDWebImage源码解读 之 NSData+ImageContentType
第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...
- SDWebImage源码解读 之 SDWebImageCompat
第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...
随机推荐
- Bootstrap-Plugin:过渡效果(Transition)插件
ylbtech-Bootstrap-Plugin:过渡效果(Transition)插件 1.返回顶部 1. Bootstrap 过渡效果(Transition)插件 过渡效果(Transition)插 ...
- Bootstrap-CL:列表组
ylbtech-Bootstrap-CL:列表组 1.返回顶部 1. Bootstrap 列表组 本章我们将讲解列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: ...
- 学习笔记之Android
Android 开发专区 - 开源中国社区 http://www.oschina.net/android 探索 Android Studio | Android Studio https://deve ...
- liquibase使用
1. 创建表 drop database if exists mybatis; create database mybatis; use mybatis; create table mybatis.C ...
- Pollard Rho因子分解算法
有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...
- Ubuntu在命令行下将默认语言改为英语
将Ubuntu安装成中文版,需要将默认语言改为英文. 用vi(或nano等文本编辑器)打开 /etc/default/locale 文件 将原来的配置内容修改为 LANG=”en_US.UTF-8″ ...
- iOS界面设计,12个优秀案例激发你的灵感
总所周知,iOS和Android是当今两大移动平台,前者采用Human Interface Design,后者采用Material Design.作为设计师,尤其是App设计师,总是会在这两者进行设计 ...
- 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)
安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04| 分类: 技术 | 标签:安卓 技术 java | ...
- CHANGE DETECTION IN ANGULAR 2
In this article I will talk in depth about the Angular 2 change detection system. HIGH-LEVEL OVERVIE ...
- Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)
本文讲的是Spring MVC如何找到正确的handler, 前面请求具体怎么进入到下面的方法,不再细说. 大概就是Spring mvc通过servlet拦截请求,实现doService方法,然后进入 ...