Natvis 对Android应用调试的支持

[原文发表地址]Natvis Support for Android Debugging

[原文发表时间] 2015/4/29 10:00 PM

希望你已经看到我们的 Visual Studio2015中对C++代码在Android上调试的支持。现在在我们的RC版本中,我们很高兴地宣布,我们已经增加了对natvis文件的支持来帮助你可视化本地类型
使用之前的CTP版本的客户让我们知道,在调试的时候有natvis对常用类的支持是非常有用的,如标准模板库(STL)容器类(例如向量,映射,栈,队列等)。在实际操作中来看看natvis,让我们来看一个简短的例子: 使用和不使用nativs,查看向量是怎么样的。为了这个示例,我创建了一个Android Native Activity工程,并且添加了一个用来创建一个向量并且向这个向量中添加10个值的函数。

首先让我们看一下没有natvis的用户体验。事实证明,仅仅通过在调试器中浏览对象来查出向量中值的个数和个别细项是不可能的。

现在,我会使用nativs文件来对向量做同样的操作。当我第一次展开向量,我看到两个选项,“[可视化视图]” – 这个视图是natvis展示给我的,“原始视图” – 这个是我们以前就有的非可视化视图。你可以一目了然的看到[可视化视图]中的“值”列,显示了向量中对象的数量(向量的大小)。

展开[可视化视图],它显示了向量的大小,容量,和存储在向量中的值。

如果你非常熟悉Windows natvis,你会发现,你应当明确地选择使用natvis视图,而不是使用默认配置。这是由于这样的事实,如果我们选择自动应用它时,gdb求表达式的值是非常缓慢的,这会严重地影响我们停在断点并且进行一步一步调试时的性能。

当然,你也可以为需要更好的可视化效果的类创建自己的natvis文件(我推荐你阅读这篇博客:如何编写可维护的本地可视化视图)。你可以把这些条目添加到Visual Studio安装的Microsoft.Android.natvis文件中 (如下所示)。然而,更容易和推荐的方法是创建你自己的natvis文件,并将其添加到你正在调试的项目的根目录下(你也可以把它和你的工程文件一起提交到源代码管理器中)。

在Visual Studio 2015将来发布的版本中将包含常用容器的可视化功能。为了快速上手使用RC,你可以使用这个附加的文件,这个文件中包含了下面这些容器实现的定义:

  • std::list
  • std::vector
  • std::map
  • std::set
  • std::array
  • std::forward_list
  • std::queue
  • std::priority_queue
  • std::bitset
  • std::valarray
  • std::__1::vector
  • std::__1::map

要使用它,请下载附加的Microsoft.Android.natvis文件,并替换安装在[Visual Studio 14 安装根目录] \ Common7 \ IDE \ CommonExtensions \Microsoft\ MDD \Debugger的副本文件 。
除了natvis,自从上次产品发布之后,我们一直在努力修复bug和改进调试性能。请让我们知道你使用新的natvis(和整个Android调试)的体验。你可以通过Visual Studio中的发送微笑功能,或者在我们的MSDN论坛报告任何问题或者反馈。

 

Microsoft.Androdi.natvis