用VS2010调试微软开放的部分源码

msdn上有一篇讲解如何用vs2008调试源码的文章:http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx 今天在vs2010上试了下,发现其实也可以,关键设置二个地方:

然后换到Symbols

在Cache symbols in this directory这里选择一个本机目录(用于存放下载源代码pdb文件)

ok,已经成功一半了,为了更方便的一次性全部下载,你也可以到codeplex网站下载一个NetMassDownLoader的小工具,地址是 http://www.codeplex.com/NetMassDownloader/

该工具可以直接用命令行一次性下载所有微软开放的源代码:

D:\software\NetMassDownloder>NetMassDownloader.exe -d D:\software\NetMassDownloder\src

这样D:\software\NetMassDownloder\src目录中将会下载到很多文件,如下图:

然后随便创建一个WinForm应用,写几行代码:

using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Text = "Debug me!";
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello World!");
        }
    }
}

在Text="Debug me!"这里设置一个断点,运行

在Call Stack窗口中,选择System.Windows.Forms.dll,然后右击,选择Go To Source Code,然后就看到了传说中的Form.cs的源码

不过,微软只开放了一少部分代码,其它没有开放的代码,也可以利用Reflector工具来查看,比如象Array.Sort方法,网上都说微软内部使用的是快递排序算法,但是最好还是眼见为实,打开Reflector,定位到System,找到Array类,以及其中的Sort方法

点击右侧代码中的Sort方法

OK,右侧的代码中,已经能看到QuickSort这个方法了,继续

总算得见真身了!

后记:这篇文章主要是给想“深究.net源代码,但是又不知道如何下手”的朋友准备的,另外mono项目(可简单理解为.net在非windows平台上的实现)其中也有不少源码,其内部实现也值得一看。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

Python3 与 C# 并发编程之~ 上篇

其实逆天现在Coding已经是80%变成Python了,20%才是Net,也不确定是否一直在Net界干下去,所以只能尽可能的在说新知识的同时,尽量把脑子里面Ne...

1334
来自专栏知识分享

C#上位机串口控制12864显示

实现的效果 ? ? ? ? ? 上面是用Proteus仿真的,,对了如果自己想用proteus仿真需要安装下面这个软件 ? 再看一下实物显示效果 ? ? ? ?...

9395
来自专栏挖坑填坑

使用.net core ABP和Angular模板构建博客管理系统(创建后端服务)

1062
来自专栏逸鹏说道

NetCore并发编程

示例代码:https://github.com/lotapp/BaseCode/tree/master/netcore/4_Concurrency

5684
来自专栏葡萄城控件技术团队

异步陷阱之死锁篇

提倡异步编程旨在给用户更好的前端体验,但异步编程也让学习成本和犯错几率大大升高,其中最常见且最难处理的就是死锁。 何谓“死锁”,英文术语称“Deadlock”,...

3009
来自专栏领域驱动设计DDD实战进阶

微服务实战(七):落地微服务架构到直销系统(实现命令与命令处理器)

我们先来看看CQRS架构,你对下图的架构还有印象吗?每个组件的功能都还清楚吗?如果有疑问,请查考文章《微服务实战(五):落地微服务架构到直销系统(构建高性能大并...

1963
来自专栏菩提树下的杨过

.net中的认证(authentication)与授权(authorization)

注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧。 “认证”与“授权”是几乎所有系统中都会涉及的概念,通俗点讲: 认证(authenticat...

37610
来自专栏圣杰的专栏

Abp通用配置模块的设计

下面我将尝试用最简单易懂的方式,对Abp源码中通用配置模块的实现方式加以提炼和精简,尽量继承原作者的设计思想,给大家呈现通用配置模块的“最佳实践”。

3441
来自专栏me的随笔

ASP.NET MVC5请求管道和生命周期

请求管道是一些用于处理HTTP请求的模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModule和IHttpHandler。所有的HTTP请求都...

1443
来自专栏魏琼东

分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

一、分布式消息总线      在很多MIS项目之中都有这样的需求,需要一个及时、高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经...

4087

扫码关注云+社区

领取腾讯云代金券