我们有一个STA模式下的C++项目,该项目会打开一个C#/ WPF库,该库通过WindowsFormsIntegration托管ESRI ArcEngine MapControl。这在Visual Studio 2013中很好用。自从我们切换到VS2015 Update 3以来,在wntdll.pdb中命中神秘断点后,调试时(在Debug和Release中)启动ArcEngine部件的过程都非常慢:“ArcEngineTestApp.exe触发了断点。”

c++ - 调试时进行“myapp.exe has triggered a breakpoint”-之后在Visual Studio 2015 Update 3中缓慢加载符号-LMLPHP

在“输出”窗口中没有进一步的解释(请参阅完整的output)。当我点击继续时,该应用程序将继续加载符号,但至少从现在开始,它的速度肯定比Visual Studio 2013中要慢。它需要VS 2015 15s才能达到断点,并且需要2:15m才能完成加载。 VS 2013展示了ArcEngine在15到20秒内的运行情况。进行比较,请参见此屏幕截图(很遗憾,您无法复制时间戳)
c++ - 调试时进行“myapp.exe has triggered a breakpoint”-之后在Visual Studio 2015 Update 3中缓慢加载符号-LMLPHP

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

c++ - 调试时进行“myapp.exe has triggered a breakpoint”-之后在Visual Studio 2015 Update 3中缓慢加载符号-LMLPHP

从Microsoft服务器加载pdb失败。

为了证明这一点,我们制作了一个demo project(有关详细信息,请参见下文)。

这仅在调试时发生。编译的应用程序可以正常且快速地运行。

我们尝试过但没有成功的事情:

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

  • 已安装扩展的列表:
  • 桌面插件的ArcObjects SDK集成
  • ArcObjects SDK集成实用程序
  • 开发人员分析工具
  • 在保存
  • 上设置文档格式
  • Microsoft.NET核心工具
  • 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”。

    Visual Studio 2015中的调试设置:
    c++ - 调试时进行“myapp.exe has triggered a breakpoint”-之后在Visual Studio 2015 Update 3中缓慢加载符号-LMLPHP

    最佳答案

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

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

    10-11 23:17
    查看更多