我正在尝试调试发布 Web 服务的 Azure 应用程序,而 Visual Studio 2012 拒绝显示源代码,即使已加载 PDB。这是我的设置:
在调试 > 选项和设置... > 调试 > 常规:
- []启用仅我的代码
- [] 启用 .NET Framework 源单步执行
- [x] 启用源服务器支持
- [ ] 要求源文件与原始版本完全匹配
在 DEBUG > Options and Settings... > Debugging > Symbols 上:
- [x] _NT_SYMBOL_PATH
- []微软符号服务器
- [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\
- ETC
重现步骤:
- 将 Azure 应用程序部署到 Development Fabric(计算模拟器)。
- 以管理员身份打开 VS2012。
- 附加到 WaWorkerHost.exe,等待符号加载并验证 MyModule.dll 是否已加载符号。
- [可选] 选择解决方案属性... > 调试源文件并添加 c:\path\to\my\CSfiles\ 作为第一个条目。
- 选择 DEBUG > New Breakpoint > Break At Function...
- 功能:MyClass.MyMethod。语言:C#。
- VS2012 抱怨找不到,但它添加了断点。
- 使断点命中。
- 一旦点击,双击“调用堆栈”的第一项。它是 MyClass.MyMethod,由 System.ServiceModel.dll 中的一个类调用。
- VS2012 显示只有“显示反汇编”选项的“无可用源”(下图):
在调用堆栈窗口中,如果我右键单击当前方法(被断点击中),然后选择符号加载信息...,最后一行显示:
c:\path\to\my\PDBs\MyModule.pdb: Symbols loaded.
如果我打开 DEBUG > Windows > Modules,我的模块会正确显示:
- 路径正确。
- 优化 = 否。
- 用户代码 = N/A(与其他所有内容一样)。
- 符号状态 = 已加载符号。
- 符号文件 = c:\path\to\my\PDBs\MyModule.pdb (这是正确的)。
是的,该应用程序是使用完整的调试信息构建的。我已经使用这个工具转储了 PDB ,它在正确的位置显示了我的源代码。
有趣的是,我可以看到 .NET Framework 的所有源代码。我只是看不到自己的来源,这真的很令人沮丧。
我已经从用户目录\Documents\Visual Studio 2012\Projects 中删除了任何 .suo 文件,但没有帮助。我想这无济于事,因为我总是附加到一个可执行文件,它会自动创建一个新的全新解决方案。