有没有一种方法可以自动将 .natvis 附加到使用 -DebugExe 启动的调试会话?
Posted
技术标签:
【中文标题】有没有一种方法可以自动将 .natvis 附加到使用 -DebugExe 启动的调试会话?【英文标题】:Is there a method to automatically attach a .natvis to debug session started using -DebugExe? 【发布时间】:2017-11-09 13:36:43 【问题描述】:我正在使用在其树中包含 .natvis 的解决方案。工作流程要求我经常使用 devenv.exe 的 /DebugExe switch 启动各种解决方案可执行文件的调试会话。但是当以这种方式启动时,调试器不会使用 .natvis 文件。
我曾尝试将/Command switch 与Add Existing Item command 一起使用,但看起来由于调试的.exe 不是正确的解决方案或项目,因此无法向其中添加任何内容(至少我失败了)。
所以问题是:有没有一种方法可以在 /DebugExe 会话中使用放置在任意路径(而不是 VisualStudio 会自动使用它的用户配置文件中)的 .natvis?
【问题讨论】:
就像这里的标题“使用 Natvis 文件”和“将 .natvis 文件添加到您的项目”:msdn.microsoft.com/en-us/library/jj620914.aspx,它显示了 .natvis 的默认路径。如果将其添加到项目中,默认情况下,我们项目中的 Natvis 文件也会插入到项目构建的 .pdb 文件中。所以如果你调试你的应用程序,一个问题是它是否可以加载 pdb 文件。 感谢@JackZhai-MSFT。但是,这不是一种选择。 VS 解决方案和项目不用于构建。它们由项目自己的构建系统生成,以便于开发和调试。可能有一个命令行选项可以将 natvis 包含到生成的 PDB 中……需要检查。不过,这会增加 PDB,如果可能的话,我希望可以使用独立的 natvis。 我会和其他成员讨论,如果我有任何更新信息,我会在这里分享。 这个问题呢?蔡薇薇分享了我们讨论这个问题后的最新成果,如果您有任何其他问题,请随时告诉我。 【参考方案1】:您可以使用/NATVIS:filename 将您的 .native 文件添加到 .pdb 文件中。它将 Natvis 文件文件名中定义的调试器可视化嵌入到 PDB 文件中由 LINK 生成。
此外,您可以参考 Jack 提供的链接中的 Deploying .natvis files 部分。我们还可以将 .natvis 文件添加到用户目录或系统目录。 .natvis 文件的评估顺序如下:
嵌入在您正在调试的 .pdb 中的 natvis 文件(除非加载的项目中存在同名文件) 作为已加载 C++ 项目或***解决方案项目一部分的 natvis 文件。这包括所有加载的 C++ 项目,包括类库,但不包括其他语言的项目(例如,您不能从 C# 项目加载 .natvis 文件)。对于可执行项目,您应该使用解决方案项来托管任何 .pdb 中尚不存在的 .natvis 文件,因为没有可用的 C++ 项目。 用户特定的 natvis 目录 (%USERPROFILE%\My Documents\Visual Studio 2015\Visualizers 系统范围的 Natvis 目录 (%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers)。这是复制随 Visual Studio 安装的 .natvis 文件的位置。如果您有管理员权限,您也可以将其他文件添加到此目录。
【讨论】:
谢谢!我已经在我们的项目中实施了 /NATVIS 解决方案。不幸的是,这不是理想的解决方案。我们不断扩展 natvis,无法使用解决方案中的那个,将不得不在编译时使用内置的那个。 具体的pdb文件是你的target.exe或者dll生成的::blogs.msdn.microsoft.com/yash/2007/10/12/…,如果你的dll文件被更新了,那就真的要更新了。反正Natvis确实有这些要求。我们还需要其他更好的解决方案,但您可以在此处向产品团队提交功能请求:visualstudio.uservoice.com/forums/121579-visual-studio。 Visual Studio 产品团队正在那里倾听用户的声音。以上是关于有没有一种方法可以自动将 .natvis 附加到使用 -DebugExe 启动的调试会话?的主要内容,如果未能解决你的问题,请参考以下文章