none
vs2008中.net framework符号加载的诡异问题。 RRS feed

  • 问题

  • 遇到恶心的问题,求助……

    想参考一下.net framework类库的一些源码,就打开了.net源码单步执行选项(仅我的代码关闭),符号文件位置(.pdb)之前也设置为符号服务器地址:http://referencesource.microsoft.com/symbols
    在这次查看.net框架源码之前,已经这样用过很多次了,都没问题。

    然后就开始单步调试(F11),结果有这几种情况:
    1.一到可以进入.net类库源码的地方(比如string的构造函数),程序就卡到那里了,所有的状态、监视、输出等窗口都空白了。可以关闭调试。
    2.和开启.net源码单步调试前根本没有不同(是以前进入过的string与List<T>类)。
    3.手动在调用堆栈窗口选定进入某类,显示“没有可用于当前位置的源代码。”。

    具体情况:
    环境:windows vista,.net framework 3.5 sp1,visual studio 2008 Professional sp1

    我建立的是CSharp的控制台程序,用了
       List<int> l = new List<int>();
       l.Add(1);
    这样的代码去查看List类。

    模块窗口显示各个dll的符号也都加载了,除了mscorlib.resources.dll。
    比如:(从窗口里复制出来的)
     System.dll C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll 是 N/A 已加载符号。 D:\symbols\System.pdb\2EE070FC24024C3386DDCBB1297806731\System.pdb 4 2.0.50727.3053 (netfxsp.050727-3000) ......

    进入调试,发现错误窗口中有输出(但还能运行),显示SystemEvents.cs中有错。进入d:\symbols\src\下查看,只有个...../SystemEvents.cs,并且还不是完全正确的,结尾少了个大括号。


    还需要什么信息我再补充。

    另:
    前一阵子因为弄出来了个 某个Windows事件相关的服务 无法启动的错误,进行过系统还原,这个应该不会有影响吧……
    学习
    2010年2月13日 9:11

答案

  • 你好!

    你有试过新建一个C#的控制台程序吗?是不是也有这种情况?

    如果同样也会发生这种情况的话,你可以试着在“运行”窗口中跑一下以下这些命令:
    - devenv.exe /resetsettings:排除由于IDE的设置产生的问题
    - devenv.exe /safemode:排除由于第三方插件或者软件引起问题的可能性

    希望对你有所帮助。


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年2月15日 8:26

全部回复

  • 你好!

    你有试过新建一个C#的控制台程序吗?是不是也有这种情况?

    如果同样也会发生这种情况的话,你可以试着在“运行”窗口中跑一下以下这些命令:
    - devenv.exe /resetsettings:排除由于IDE的设置产生的问题
    - devenv.exe /safemode:排除由于第三方插件或者软件引起问题的可能性

    希望对你有所帮助。


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年2月15日 8:26
  • 你好!感谢你的答复。
    尝试了新建工程,也尝试了restsettings,safemode,情况依旧如此。

    查看模块符号加载信息,与之前一样,如下:
    C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.pdb: 无法查找或打开 PDB 文件。
    D:\Microsoft Visual Studio 9.0\Common7\IDE\mscorlib.pdb: 无法查找或打开 PDB 文件。
    D:\Symbols\SinglePdbs\symbols\dll\mscorlib.pdb: 无法查找或打开 PDB 文件。
    D:\Symbols\SinglePdbs\dll\mscorlib.pdb: 无法查找或打开 PDB 文件。
    D:\Symbols\SinglePdbs\mscorlib.pdb: 无法查找或打开 PDB 文件。
    D:\Symbols\MicrosoftPublicSymbols\mscorlib.pdb\5E981EB04B4E45CC926C36730201D7521\mscorlib.pdb: 已加载符号。

    看起来应该是加在上了,但还是提示“没有可用于当前位置的源代码”。在调用堆栈窗口中,右键点“> mscorlib.dll!System.Collections.Generic.List<int>.Add(int item = 1) + 0x9 字节 ”以后,只有转到反汇编,转到源代码是灰的。

    会不会是安装.net framework 3.5 sp1的问题?貌似在这之前是可以的,之后也记不清楚用过了没有。

    比较郁闷。
    或者哪里有直接可以查看的源码包下载?.cs格式的。


    学习
    2010年2月19日 6:53
  • 说实话,因为你的系统是做过还原的,所以有点难讲这个问题出在哪里了。

    不过你可以试一下重装一下.NET Framework 3.5,看下行不行。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年2月19日 6:59
  • 嗯,好吧,多谢了~


    学习
    2010年2月19日 7:51
  • 客气了,如果有问题,我们再继续看看还有没有其他的解决方法。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年2月19日 7:53
  • 如果你用的Vista SP2,你尝试把版本降回2.0.50727.4016,你可以查找一下你系统已经安装的补丁,应该是装了KB983589引起的版本升级。
    这类问题都是因为微软没有及时更新符号文件服务器上面的符号文件,所以只能降级会服务器上面有正确文件的版本,这样才能获取到正确的符号文件,调试.Net Framework源代码。

    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2010年11月18日 9:26