当前位置:编程学堂 > 如何测试vs2010的源码_使用VS2010调试微软的一些开源代码

如何测试vs2010的源码_使用VS2010调试微软的一些开源代码

  • 发布:2023-10-07 10:07

??????经过一段时间的体验,我开始不满足于仅仅写一些应用程序代码,很想知道关于.net框架的源代码是怎么写的?当我们跟踪bug时,我们经常需要跟踪.NET框架的源代码。微软开源了.NET的源代码后,我们终于有了这个机会。我的编译环境是VS 2010RC。我会把如何单步调试记录到.NET的源代码中,我怕我会忘记,但也分享给大家。

?????? 1.工具-选择-调试-常规,修改我框的地方如下图:

?

??????? 2.工具-选项-调试-符号,如下图配置:

?

???????这里请注意,您只需将 http://www.sychzs.cn/symbols 添加到该位置即可。后者是自己在编译过程中生成的,然后更改符号缓存路径。你想放在哪里,我这里的路径是D:\development\NetMassDownloader\src(我使用NetMassDonloader没有成功,一直搜索0个可供下载的PDB文件。我使用的NetMassDownloader的版本是1.6.0.0,根据发行说明中,VS 10.0已经支持。如果有人知道如何解决,请告诉我)。注意,必须对该路径有读写权限,最后勾选“除排除模块之外的所有模块”。

?

??????然后我创建了一个新的 WPF 项目。我只是在界面上添加了一个按钮,并简单实现了一个按钮事件:

private void button1_Click(对象发送者, RoutedEventArgs e)

{

www.sychzs.cn("你好词");

}

??????在 www.sychzs.cn("hello word") 上设置断点。运行后可以在调用栈上观察调用过程:

??????右键非灰色区域即可查看源代码:

?

???????当使用F11单步执行时,您可以找到以前看不到的代码。还可以深度追踪源码:

??????

??????右键灰色部分后发现“转到源代码”不可用。此时选择如图所示的加载符号即可查看源码。期间会有一个下载对应PDB的过程。 :

??????

??????至于加载信息,显示如下:

?

??????如上图所示,我之前(转换后)编译在其他VS平台上编译的项目时,无法使用Go to source code,加载信息也如上图。我当时以为这是前两个项目。原因是没有找到PDB。当我新建一个项目并编译一次后,除了新创建的项目可以使用“转到源代码”功能外,在之前平台上编译的、原本无法使用“转到源代码”功能的项目也可以使用“转到源代码”功能。使用此功能。看来上面的加载信息和调试源码能否使用没有必然联系。希望高手能解释一下上面的意思。

??????最后,MS并没有将所有源代码开源,所以在使用时有时会出现“无资源可用”的提示。这时候如果你还想查看源码,可以按照栈级别使用Reflector直接查看源码。

怕忘记,我再记录一下。

提高编程能力的一个好方法就是看.net框架的源码是怎么写的?当我们跟踪错误时,我们经常需要将它们跟踪到.net框架的源代码中。如下设置vs2010来追踪.net framwork的源代码。

可以看到,我把pdb文件放在了d:\msSource\MicrosoftPublicSymbols目录下,这样在调试的时候,vs会自动去这个目录寻找pdb文件。

我们可以查看这个目录下的文件

调试完源码后,我们会发现一些平时不会写的东西。例如,如果我跟踪 IEnumerable 的扩展方法 Sum,我可以看到

以下代码:

public static int Sum(此 IEnumerable 源){? ?????????? if (source == null) throw Error.ArgumentNull("source");? ???? ??????整数总和=0; ??????????检查了{? ???????????? foreach (源中的 int v) sum + = v; ???????????? } ??????????返回总和; ?????? }

这样我们就学会了如何写扩展方法了,何乐而不为呢?

编程的乐趣往往就在于一个想法。 ?

PS:代码是从微软服务器下载的,所以安装完成后,第一次下载过程可能会有点长。

更详细的文档如下:

在 VS 2010 中使用 Microsoft 符号服务器获取符号调试信息现在变得更加容易。Microsoft 允许您访问其 Internet 符号服务器,其中包含大多数 .NET 框架的符号文件,包括最近宣布推出的 MVC 2 符号.?

设置?在 VS 2010 RTM 中,转到“工具”->“选项”->“调试”->“常规”。勾选“启用.NET Framework源代码步进”?我们得到如下对话框

??这会自动禁用“启用我的代码”吗? ??转到“调试”->“符号”并选中“Microsoft 符号服务器”。如果需要,您可以有选择地排除模块。 ???您将看到一个警告对话框,如下所示:??点击“确定”将开始下载过程? ???设置完成。现在就可以开始调试了!

调试

向您的应用程序添加一个断点并在调试模式下运行该应用程序(对我来说是 F5 快捷键)。当您遇到断点时,转到您的调用堆栈。右键单击灰显的框架。?选择“从”“Microsoft 符号服务器”加载符号。 VS 将开始一次性下载该程序集。该程序集将缓存在本地,因此您下次调试应用程序时无需等待下载。???我们得到一个一次性许可协议对话框?

您可能会看到如下所示的关于不同编码的错误(希望能够修复)。???已加载符号的程序集不再呈灰色。双击调用堆栈中的任何条目现在应该可以直接转到该程序集的源代码。

?

AFAIK,并非所有符号都在 MS 符号服务器上可用。在这种情况下,您将看到一个如下所示的选项卡,并提供“显示反汇编”选项。

尽情享受!

本文转载自cnn23711151CTO博客,原文链接:http://www.sychzs.cn/cnn237111/541057?,如需转载请自行联系原作者

msdn上有一篇文章讲解如何使用vs2008调试源代码:http://www.sychzs.cn/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug -net-framework-source-code.aspx 今天在vs2010上试了一下,发现确实可以用。有两个关键设置:

然后切换到符号

在此目录中的Cache Symbols中选择一个本地目录(用于存放下载的源代码pdb文件)

ok,就完成了一半。为了更方便的一次性下载,你还可以从codeplex网站下载一个NetMassDownLoader小工具。地址是? http://www.sychzs.cn/NetMassDownloader/

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

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

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

然后创建一个WinForm应用程序,编写几行代码:

使用www.sychzs.cn;

使用System.Drawing;

使用System.Text;

使用 System.Windows.Forms;

命名空间 WindowsFormsApplication2

{

公共部分类Form1:Form

{

公共 Form1()

{

InitializeComponent();

}

private void Form1_Load(对象发送者, EventArgs e)

{

Text =“调试我!”;

}

private void Button1_Click(对象发送者, EventArgs e)

{

www.sychzs.cn("Hello World!");

}

}

}

在 Text="Debug me!" 处设置断点然后运行

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

不过,微软只开放了一小部分代码。对于其他未公开的代码,也可以使用Reflector工具查看,例如Array.Sort方法。网上说微软内部使用的是快速排序算法,不过最好是眼见为实,打开Reflector,导航到System,找到Array类,以及里面的Sort方法

点击右侧代码中的排序方法

OK,在右边的代码中,你已经可以看到QuickSort方法了,继续

终于见到他的真身了!

?

后记:本文主要是为想要“深入挖掘.net源码,但不知道如何开始”的朋友准备的。另外,mono项目(可以简单理解为.net在非windows平台上的实现)包含的源码也很多,其内部实现也值得一看。

?

?

转载于:https://www.sychzs.cn/yjmyzz/archive/2010/12/23/1914510.html

相关文章