【发布时间】:2016-11-08 14:12:34
【问题描述】:
我们有一个 STA 模式的 C++ 项目,它打开一个 C#/WPF 库,该库通过 WindowsFormsIntegration 托管一个 ESRI ArcEngine MapControl。这在 Visual Studio 2013 中运行良好。由于我们切换到 VS2015 Update 3 启动 ArcEngine 部分,而调试(在调试和发布中)在 wntdll.pdb 中遇到神秘断点后速度非常慢:“ArcEngineTestApp.exe 已触发断点。”
“输出”窗口中没有进一步的说明(请参阅完整的output)。当我点击继续时,应用程序继续加载符号,但至少从现在开始它肯定比 Visual Studio 2013 慢。VS 2015 需要 15 秒才能到达断点,之后需要 2:15 米才能完成加载。 VS 2013 展示了 15-20 秒的 ArcEngine。请参阅此屏幕截图进行比较(不幸的是,无法复制时间戳)
当我点击消息中断时,会显示“wntdll.pdb not loaded”:
从 Microsoft 服务器加载 pdb 失败。
为了证明这一点,我们创建了一个demo project(详见下文)。
这仅在调试时发生。编译后的应用运行良好且快速。
我们已经尝试过但没有成功:
- 搜索“已触发断点”消息,但未发现类似问题。
- 已知因性能问题而停用的设置(XAML 的 UI 调试工具、诊断工具、IntelliTrace)
- 在调试/符号中没有激活符号服务器
- 没有安装已知会影响性能的 VS 扩展。 (完整列表见下文)
- 尝试了不同的 ArcEngine 版本(10.3.1 和 10.4)
- 从 MS 和 ESRI 符号服务器加载符号并在本地缓存它们。
- 删除所有断点
- 我完全重新安装了我的电脑。现在只安装了一个 Visual Studio (2015)
- 在另一台 PC 上测试(安装了几个 VS)- 相同的行为
已安装扩展列表:
- 用于桌面插件的 ArcObjects SDK 集成
- ArcObjects SDK 集成实用程序
- 开发者分析工具
- 保存时格式化文档
- Microsoft.NET Core 工具
- Microsoft ASP.NET 和 Web 工具
- Microsoft ASP.NET Web 框架和工具
- Microsoft Azure 应用服务工具
- Microsoft 连接服务
- 适用于 VS 2015 的 NuGet 包管理器
- Productivity Power Tools 2015(仅激活输出窗口中的时间戳)
- Microsoft Visual Studio 的 TypeScript
- Visual Studio 可扩展性模板
VS 2015 Output(从 ArcEngine 调用开始)。
要运行Demo project,您需要有效的 ArcEngine 许可证和 ArcEngine SDK。由于许可原因,我们无法发布 ESRI dll。将它们复制到项目文件夹“ArcEngineTestLibs”中。
【问题讨论】:
-
您是否禁用了“启用 .NET Framework 源代码步进”和“启用源服务器支持”调试选项?由于在VS2013中运行正常,可以在TOOLS->Options->Debugging下对比VS2015的设置。
-
@Jack Zhai 这两个选项在 VS 2013 和 2015 中都被禁用了。我将添加调试设置的屏幕截图。
-
请禁用“要求源文件与原始版本完全匹配”和“Edie and Continue”,因为你说它是混合模式应用程序,请检查你的项目属性->配置属性->两个VS版本下的调试类型。根据输出信息,找不到pdb文件,所以最好开启微软符号服务器,调试时在Modules窗口手动加载符号。
-
@Jack 禁用这两个选项没有帮助。而且我已经尝试从 MS 和 ESRI 加载符号,这需要很长时间并且之后也无济于事。忘了提那个。我更新了问题。
-
我更新了这个问题,更加关注断点,因为在那之后加载速度大大减慢。
标签: c++ debugging visual-studio-2015 arcobjects