Visual Studio 2019中C ++的进程外调试器

Visual Studio 2019预览版1引入了针对C ++的改进的调试器,该调试器使用外部64位进程托管其资源密集型组件。 如果以前在调试C ++应用程序时遇到内存问题,现在应使用Visual Studio 2019在很大程度上解决这些问题。

以下是调试Gears of War 4的实际示例。



背景知识


提供反馈后,C ++开发人员经常在调试复杂的C ++应用程序时谈论与高内存使用相关的问题。 大量的内存消耗与大量的符号数据相关,调试器必须加载这些符号数据并将其显示在调试器窗口中。 而且,这些信息的数量在工作期间不断增长。 最终,Visual Studio进程可能会由于内存不足而失败。

我们在Visual Studio 2017中进行了重大改进以缓解此问题。 例如,更新15.6引入了针对/调试:快速链接的内存优化,从而使调试器的内存消耗降低了30%。 由于我们努力避免在Visual Studio 2019中解决此问题,因此我们将占用大量内存的组件移至单独的64位进程中。

案例研究:战争机器调试4


我们与内部和外部合作伙伴团队紧密合作,以确保对调试器所做的更改已在大型的实际应用程序中得到验证和验证。 下面我们复制了cdpv中的视频。 当调试由The Coalition开发的Gears of War 4时,它显示了Visual Studio 2017和Visual Studio 2019之间的内存使用情况的并行比较。 在查看游戏代码并检查变量后,Visual Studio 2017的内存使用量增加到1.3 GB。 在相同的情况下,Visual Studio 2019提供了更好的内存使用率:由于符号数据存储在64位调试器工作流中,因此使用的内存量保持在285 MB左右。



现在,一切也都在运行时更好地工作了。

不支持的方案和一些已知问题


  • 32位Windows不支持此功能。
  • C ++ / CLI模块的符号仍在加载中
  • 在此模式下,不支持不推荐使用的C ++ Expression Evaluator加载项( 此处为示例)。

如果需要继续使用进程内调试器,可以通过转到“工具”->“选项”中的“调试”选项卡,然后取消选中“在外部进程中加载​​调试符号(仅适用于本地)”来禁用该功能。



来自Microsoft开发人员社区 @msdevru的人员(Microsoft开发人员社区面向开发人员的频道以及对新技术感兴趣的所有人)帮助我们编写了本文。

Source: https://habr.com/ru/post/zh-CN433992/


All Articles