c++ - 调试时出现 "myapp.exe has triggered a breakpoint"- 之后 Visual Studio 2015 Update 3 中的符号加载速度缓慢

标签 c++ debugging visual-studio-2015 arcobjects

我们有一个 STA 模式的 C++ 项目,它打开一个 C#/WPF 库,该库通过 WindowsFormsIntegration 托管 ESRI ArcEngine MapControl。这在 Visual Studio 2013 中工作得很好。自从我们切换到 VS2015 Update 3 后,在 wntdll.pdb 中遇到神秘断点后,在调试(在调试和发布中)时启动 ArcEngine 部分会非常慢:“ArcEngineTestApp.exe 已触发断点”

enter image description here

输出窗口中没有进一步的解释(请参阅完整的 output )。当我点击“继续”时,应用程序会继续加载符号,但至少从现在开始,它肯定比 Visual Studio 2013 慢。VS 2015 需要 15 秒才能到达断点,之后需要 2 分 15 秒才能完成加载。 VS 2013 显示 ArcEngine 在 15-20 秒内完成。请参阅此屏幕截图进行比较(不幸的是无法复制时间戳) enter image description here

当我在消息上单击“中断”时,显示“wntdll.pdb 未加载”:

enter image description here

从 Microsoft 服务器加载 pdb 失败。

为了证明这一点,我们制作了 demo project (详情请参阅下文)。

这仅在调试时发生。编译后的应用程序运行良好且快速。

我们已经尝试过但没有成功的方法:

  • 搜索了“已触发断点”消息,但未找到类似问题。
  • 已停用已知会出现性能问题的设置(XAML 的 UI 调试工具、诊断工具、IntelliTrace)
    • 在调试/符号中未激活符号服务器
    • 没有安装任何已知会影响性能的 VS 扩展。 (完整列表见下文)
    • 尝试了不同的 ArcEngine 版本(10.3.1 和 10.4)
    • 从 MS 和 ESRI 符号服务器加载符号并将其缓存在本地。
    • 删除所有断点
    • 我完全重新安装了我的电脑。现在只安装了一个 Visual Studio (2015)
    • 在另一台电脑上测试(安装了多个 VS)- 相同的行为

已安装的扩展列表:

  • 桌面插件的 ArcObjects SDK 集成
  • ArcObjects SDK 集成实用程序
  • 开发者分析工具
  • 保存时格式化文档
  • Microsoft.NET 核心工具
  • Microsoft ASP.NET 和 Web 工具
  • Microsoft ASP.NET Web 框架和工具
  • Microsoft Azure 应用服务工具
  • 微软互联服务
  • 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”中。

Visual Studio 2015 中的调试设置: enter image description here

最佳答案

当我将“调试/调试器类型”中的 C++ 项目设置从“自动”更改为“仅托管”时,它又像 VS 2013 中一样快。仍然想知道为什么。

关于c++ - 调试时出现 "myapp.exe has triggered a breakpoint"- 之后 Visual Studio 2015 Update 3 中的符号加载速度缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489106/

相关文章:

c# - 为什么 Action.Method.IsStatic 对于某些 lambda 表达式在 Visual Studio 2013 和 2015 之间不同

VS2015 中的 Azure 调试环境启动时崩溃

c++ - 如果 `n`是 `2019`的倍数并且不在 `(a, b)`间隔中,则找到一个逻辑表达式,该表达式为true

c++ - Marlett 字体 : Can I load it and use it in WinAPI

visual-studio-2015 - 卸载 Microsoft ASP.NET 和 Web 工具

c - 如何调试嵌入式进程?

c# - 在此文件夹中找不到匹配的符号文件

c++ - 如何在没有 if 语句的情况下从最小到最大对一组整数进行排序?

c++ - 核心转储和 gcov 覆盖率报告

c - 为什么我的程序不能运行?