当前位置:首页 > 动态 > UE4开发入门   > UE4开发-VisualStudio2015-vs2015-不显示调试Debug变量解决方案
内容详情
UE4开发-VisualStudio2015-vs2015-不显示调试Debug变量解决方案
来源:      发布时间:2018-05-13 13:52      浏览:3148     字体:    

刚开始接触UE4开发的时候,遇到了一个很棘手的问题。就是在调试的时候无法显示变量信息。如下图:

上图中右下角带黑色小锁的地方是展不开或者看不了数据的。

我们尝试过在【调试】-【选项】-【调试】-【常规】设置,结果还是不行。但后来实验的结果是,根本不需要勾选【在变量窗口中显示对象的原始结构】,然后就实现了查看变量。


如图:

效果如图:


如果你的VS环境在配置的时候被弄乱了,在安装了上面2个东西之后还是不能查看,就导入我的配置参数吧:

【工具】-【导入导出配置】

vs-2015-UE4-natvis配置文件







分割线,有很多人在调试UE4的时候并没有出现这个局部变量的设置,这个跟visual studio 2015的 .natvis文件的解析有关

{什么是.natvis


关于自定义调试器的更多信息,可以查看如下几篇文章,这里就不多介绍了:

除了手动创建的方式外,也有人写将一些通用的框架如boost等写好了自定义视图,我们就可以直接调用即可,入我之前介绍过的一款C++ 可视化调试工具增强插件


我们先需要为UE4人工添加 .natvis 的配置。

文件的路径和教程如下:


教程:


UE4.natvis

官方文档:

https://docs.unrealengine.com/latest/INT/Programming/Development/VisualStudioSetup/index.html#debugging 

其中debug插件安装方式是:

将文件:[UE4Root]/Engine/Extras/VisualStudioDebugging/UE4.natvis

拷贝到:[UserProfile]/My Documents/Visual Studio 2013/Visualizers/UE4.natvis

或者拷贝到:[VisualStudioInstallPath]/Common7/Packages/Debugger/Visualizers/UE4.natvis

这样就可以查看FString等UE4的变量值了


UnrealVS Extension

官方文档:

https://docs.unrealengine.com/latest/INT/Programming/Development/VisualStudioSetup/UnrealVS/index.html

安装文件位置在:

[UE4RootLocation]/Engine/Extras/UnrealVS//UnrealVS.vsix

关闭VS并双击安装好以后,右击工具栏空白处,勾选UnrealVS;或者点击菜单:View -》 Toolbars -》UnrealVS。这样就能看到UnrealVS的工具按钮了 


在 Visual Studio 调试器中创建本机对象的自定义视图

URL:  https://docs.microsoft.com/zh-cn/visualstudio/debugger/create-custom-views-of-native-objects

内容:


Visual Studio Natvis 框架允许你自定义 Visual Studio 在调试器变量窗口中显示本机类型的方式 (例如,监视窗口中,局部变量窗口中,然后在数据提示

Natvis 代替 Visual Studio 早期版本中使用的 autoexp.dat 文件,并提供 XML 语法、更好的诊断、版本控制和多个文件支持。

备注

当发生以下情况时,Natvis 框架不能用于可视化:

  • 在调试器类型设置为 “混合”的情况下调试 C++ Windows 桌面项目。
    • 执行混合的模式调试在 Windows 桌面应用程序在托管的兼容模式 (工具 > 选项 > 调试 > 常规 > 使用托管兼容模式)。
    • 在 Windows 桌面应用程序在本机兼容模式中进行调试 (工具 > 选项 > 调试 > 常规 > 使用本机兼容模式)。

为什么创建 Natvis 可视化?

可使用 Natvis 框架为你创建的类型创建可视化规则,以便开发人员可以在调试期间轻松查看它们。

例如下, 图显示类型的变量的Windows::UI::Xaml::Controls::TextBox ,在调试器中的显示没有应用任何自定义可视化效果。

TextBox 默认可视化

突出显示的行显示 Text 类的 TextBox 属性。 Complex 类层次结构使得难以找到此值;此外,调试器不知道如何解读对象使用的因此你看不到文本框中的字符串的自定义字符串类型。

相同TextBox看起来要简单得多变量窗口中应用自定义可视化效果规则时。 可以同时查看类的重要成员,且调试器显示自定义字符串类型的基础字符串值。

使用可视化工具的 TextBox 数据

使用 Natvis 文件

.natvis 文件是具有 .natvis 扩展名的 XML 文件。 %VSINSTALLDIR%\Xml\Schemas\natvis.xsd中定义了架构。

.natvis 文件的基本结构是一个或多个 Type 元素,其中每个 Type 元素都表示某个类型的可视化条目,该类型在 Name 特性中指定了完全限定名称。

XML复制
 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="MyNamespace::CFoo"> .  
    . Type> <Type Name="..."> .  
    . Type> AutoVisualizer> 

Visual Studio 在 %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers 文件夹中提供了一些 .natvis 文件。 这些文件包含许多通用类型的可视化规则,并且在你编写新类型的可视化效果时可作为示例。

将 .natvis 文件添加到你的项目

可以将 .natvis 文件添加到任何 C++ 项目。

若要添加新.natvis 文件,与打开的 c + + 项目中,选择中的项目节点解决方案资源管理器,然后单击添加 > 新项 > Visual c + + > 实用程序 > 调试器可视化文件 (.natvis) 调试器将自动从 C++ 项目加载 Natvis 文件。 默认情况下,你项目中的 Natvis 文件还会插入到项目生成的 .pdb 文件中。 这表示如果调试此项目生成的的二进制文件,调试器将从 .pdb 加载 Natvis 文件,即使你没有打开该项目时也是如此。 如果不想将 .natvis 文件包含在 .pdb 中,右键单击“解决方案资源管理器”中的 .natvis 文件 ,然后在“配置属性” 窗口中将“从生成中排除” 设置为“是” 。

建议使用 Visual Studio 编辑 Natvis 文件。在调试时所做的任何更改均将在保存文件时自动生效。 还可从 IntelliSense 获得改善的编辑体验。

从 .pdb 加载的 Natvis 文件仅适用于 pdb 所引用的模块中的类型。 例如,如果 Module1.pdb 为名为 Test的类型定义一个条目,则此条目仅适用于 Module1.dll 中的 Test 类。 如果另一个模块还定义了一个名为类测试,则 Module1.pdb 的 natvis 条目将不适用于到它。

部署 .natvis 文件

如果.natvis 文件仅适用于创建 Visual Studio 项目中的类型,无需执行任何操作;该.natvis 包含在.pdb 中。 但你可以将 .natvis 文件添加到用户目录或系统目录(如果你希望它们适用于多个项目)。

评估 .natvis 文件顺序如下:

  1. .natvis 文件嵌入到.pdb (除非已加载的项目中存在具有相同名称的文件) 进行调试。

  2. 加载的 c + + 项目或顶级解决方案项的一部分的.natvis 文件。 此组包括所有已加载的 c + + 项目,包括类库,但它不包括其他语言的项目 (例如,不能加载.natvis 文件从 C# 项目)。 对于可执行项目,应使用解决方案项托管任何尚不存在于 .pdb 中的 .natvis 文件,因为没有任何可用的 C++ 项目。

  3. 特定于用户的 natvis 目录 (例如, %USERPROFILE%\Documents\Visual Studio 2017\Visualizers或 %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers)。

  4. 系统级 Natvis 目录 (%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers)。 此目录是随 Visual Studio 一起安装的.natvis 文件被复制到其中。 如果具有管理员权限,你可以向此目录添加其他文件。

在调试时,修改 .natvis 文件

可以在包含 .natvis 文件的项目中调试项目时修改 IDE 中的该文件。 打开 IDE 中的文件(使用正在调试的 Visual Studio 的相同实例)、对其进行修改并保存。 一旦保存了该文件,就应更新 “监视” 窗口和 “局部变量” 窗口以反映这些更改。 如果在 IDE 外部修改 .natvis 文件,则所做的更改不会自动生效。 若要更新窗口,可以评估“监视” 窗口中的 .natvisreload 命令。 此操作可使更改生效,无需重新启动调试会话。

你还可以添加或删除解决方案,来进行调试,并且 Visual Studio 将添加或删除相关的可视化效果的.natvis 文件。

如果.natvis 文件嵌入到.pdb 中,您无法在调试时对它进行修改。

使用 .natvisreload命令时 natvis 文件升级到较新版本 (例如,如果它已签入源代码管理,并且你想要选取人否则对文件所做的最新更改)。 建议使用 Visual Studio XML 编辑器来编辑 natvis 文件。

表达式和格式化

Natvis 可视化效果使用 C++ 表达式指定需显示的数据项。 除了增强和中所述从调试器中的 c + + 表达式的限制上下文运算符 (c + +),应该注意以下差异:

  • Natvis 表达式在可视化对象上下文而非当前堆栈框架中进行计算。 例如,如果你使用x在 Natvis 表达式中,标识符引用名为的字段x不到一个名为的本地变量进行可视化的对象中x中当前正在执行的函数。 你可以访问全局变量,但不能访问 Natvis 表达式内的局部变量。

  • Natvis 表达式不允许函数求值或副作用。 这意味着函数调用和赋值运算符被忽略。 由于 调试器内部函数 没有副作用,因此可以从所有 Natvis 表达式自由调用它们,即使不允许其他函数调用也是如此。

    若要控制表达式在变量窗口中的显示方式,可以使用任何中所述的格式说明符格式说明符部分c + + 中的格式说明符主题。 请注意虚拟化使用条目时内部 natvis,例如,将忽略格式说明符Size中的表达式ArrayItems 展开

Natvis 视图

Natvis 视图允许你以多种方式查看任何类型。 例如,可以定义一个名为 simple 的视图,它为你提供一种类型的简化视图。 例如,下面是 std::vector的可视化效果:

XML复制
<Type Name="std::vector<*>"> <DisplayString>{{ size={_Mylast - _Myfirst} }}DisplayString> <Expand> <Item Name="[size]" ExcludeView="simple">_Mylast - _MyfirstItem> <Item Name="[capacity]" ExcludeView="simple">_Myend - _MyfirstItem> <ArrayItems> <Size>_Mylast - _MyfirstSize> <ValuePointer>_MyfirstValuePointer> ArrayItems> Expand> Type> 

DisplayString 和 ArrayItems 元素用于默认视图和简单视图中,虽然 [size] 和 [capacity] 项已从简单视图中排除。 可以使用 ,view 格式说明符来指定替代视图。 在“监视” 窗口中,将简单视图指定为 vec,view(simple)

与简单视图的监视窗口

诊断 Natvis 错误

可使用 Natvis 诊断来对语法和分析错误进行故障排除。 如果调试器在可视化条目中遇到错误,它将忽略这些错误,并显示原始形式的类型或选取其他适当的可视化效果。 若要了解某个可视化条目被忽略的原因并了解有哪些基础错误,你可以打开 Natvis 诊断工具 > 选项 > 调试 > 输出窗口 > Natvis 诊断消息 (仅 c + +)选项。 错误都显示在 “输出” 窗口中。




途联微信号