繁体   English   中英

即使加载了PDB,Visual Studio 2012也拒绝显示源代码

[英]Visual Studio 2012 refuses to show source, even with PDB loaded

我正在尝试调试发布Web服务的Azure应用程序,而Visual Studio 2012拒绝显示源代码,即使加载了PDB也是如此。 这是我的设置:

在DEBUG>选项和设置...>调试>常规:

  • []启用我的代码
  • []启用.NET Framework源步进
  • [x]启用源服务器支持
  • []要求源文件与原始版本完全匹配

在DEBUG>选项和设置...>调试>符号:

解决方案属性>调试源文件:

  • C:\\路径\\为\\我\\ CSfiles \\
  • c:\\ Program Files(x86)\\ Microsoft Visual Studio 11.0 \\ VC \\ crt \\ src \\
  • 等等

重现步骤:

  1. 将Azure应用程序部署到Development Fabric(计算仿真器)。
  2. 以管理员身份打开VS2012。
  3. 附加到WaWorkerHost.exe,等待符号加载并验证MyModule.dll是否加载了符号。
  4. [可选]选择“解决方案属性...”>“调试源文件”,并将c:\\ path \\添加到\\ my \\ CSfiles \\作为第一个条目。
  5. 选择DEBUG> New Breakpoint> Break At Function ...
  6. 功能:MyClass.MyMethod。 语言:C#。
  7. VS2012抱怨它无法找到,但它增加了断点。
  8. 使断点命中。
  9. 点击后,双击“调用堆栈”的第一项。 它是MyClass.MyMethod,由System.ServiceModel.dll中的类调用。
  10. VS2012显示“无源可用”,仅显示“显示反汇编”选项(如下图所示):

在此输入图像描述

在Call Stack窗口,如果我右键单击当前方法(被断点命中),并选择Symbol Load Information ...,最后一行显示:

c:\path\to\my\PDBs\MyModule.pdb: Symbols loaded.

如果我打开DEBUG> Windows> Modules,我的模块会正确显示:

  • 路径是正确的。
  • 优化=否。
  • 用户代码= N / A(与其他所有内容一样)。
  • 符号状态=已加载符号。
  • 符号文件= c:\\ path \\ to \\ my \\ PDBs \\ MyModule.pdb(这是正确的)。

是的,应用程序是使用完整的调试信息构建的。 我已经使用此工具转储了PDB,并在正确的位置显示了我的源代码。

有趣的是,我可以从.NET Framework中看到所有来源。 我只是看不到自己的来源,这真的令人沮丧。

我已经从user-dir \\ Documents \\ Visual Studio 2012 \\ Projects中删除了任何.suo文件,但没有帮助。 我想这无济于事,因为我总是附加一个可执行文件,它会自动创建一个新的解决方案。

我以为微软发布了.net的所有代码。 但显然ServiceModel程序集仍然关闭。

可能是ServiceModel先调用你的代码使调试器混淆了。

但是对于你的问题,听起来这个服务正在运行旧版本的dll。

尝试取消选中“要求源文件与原始文件完全匹配”设置,并查看它是否在断点处中断。 如果它在那个阶段遇到你的断点那么这意味着在部署你的dll时会遇到一些问题。

您是否尝试过像resharper这样的反编译器来查看它是否有效?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM