我正在尝试调试发布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\ - 等等
重现步骤:
如果我打开DEBUG > Windows > Modules,我的模块会正确显示:
在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\ - 等等
重现步骤:
- 将Azure应用程序部署到开发计算机模拟器 (Compute Emulator)。
- 以管理员身份打开VS2012。
- 附加到WaWorkerHost.exe,等待符号加载并验证MyModule.dll已加载符号。
- [可选] 选择“解决方案属性”... > “调试源文件”,并将c:\path\to\my\CSfiles\添加为第一个条目。
- 选择DEBUG > New Breakpoint > Break At Function...
- 函数:MyClass.MyMethod。语言:C#。
- VS2012会报告未能找到,但它会添加断点。
- 使断点生效。
- 一旦生效,在“调用堆栈”的第一项上双击。它是由System.ServiceModel.dll的类调用的MyClass.MyMethod。
- VS2012显示“无可用源”,只有“显示反汇编”选项(如下图所示):
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文件,但没有帮助。我想这不会有帮助,因为我总是附加到一个可执行文件,它会自动创建一个新的新解决方案。