Visual Studio 2012拒绝显示源代码,即使已加载PDB文件。

5
我正在尝试调试发布Web服务的Azure应用程序,即使已加载PDB,Visual Studio 2012也拒绝显示源代码。这是我的设置:
在DEBUG > Options and Settings... > Debugging > General:
- [ ] 启用“仅使用我的代码” - [ ] 启用“.NET Framework源代码步进” - [x] 启用源服务器支持 - [ ] 要求源文件与原始版本完全匹配
在DEBUG > Options and Settings... > Debugging > Symbols:
- [x] _NT_SYMBOL_PATH - [ ] Microsoft符号服务器 - [x] c:\path\to\my\PDBs - [x] http://referencesource.microsoft.com/symbols 解决方案属性 > 调试源文件:
- c:\path\to\my\CSfiles\ - c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src\ - 等等
重现步骤:
  1. 将Azure应用程序部署到开发计算机模拟器 (Compute Emulator)。
  2. 以管理员身份打开VS2012。
  3. 附加到WaWorkerHost.exe,等待符号加载并验证MyModule.dll已加载符号。
  4. [可选] 选择“解决方案属性”... > “调试源文件”,并将c:\path\to\my\CSfiles\添加为第一个条目。
  5. 选择DEBUG > New Breakpoint > Break At Function...
  6. 函数:MyClass.MyMethod。语言:C#。
  7. VS2012会报告未能找到,但它会添加断点。
  8. 使断点生效。
  9. 一旦生效,在“调用堆栈”的第一项上双击。它是由System.ServiceModel.dll的类调用的MyClass.MyMethod。
  10. VS2012显示“无可用源”,只有“显示反汇编”选项(如下图所示):

enter image description here

在调用堆栈窗口中,如果我右键点击当前方法(断点命中的方法),并选择符号加载信息...,最后一行显示:
c:\path\to\my\PDBs\MyModule.pdb: Symbols loaded.

如果我打开DEBUG > Windows > Modules,我的模块会正确显示:
  • 路径是正确的。
  • 优化 = 否。
  • 用户代码 = N/A(像其他所有内容一样)。
  • 符号状态 = 符号已加载。
  • 符号文件 = c:\path\to\my\PDBs\MyModule.pdb(这是正确的)。

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

有趣的是,我可以看到来自.NET Framework的所有源代码。我只是无法看到自己的源代码,这真的很令人沮丧。

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

1个回答

0

我原以为微软已经公开了所有的 .net 代码。但显然,ServiceModel 组件仍然是封闭的。

可能是因为 ServiceModel 在调用您的代码之前执行了一些魔法,使得调试器感到困惑。

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

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

您尝试过像 resharper 这样的反编译器吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接