在Visual Studio调试器中显示Unreal的数据类型的值

转自:http://blog.csdn.NET/witton/article/details/5977766

在Unreal引擎中大量使用了自定义的数据类型如:FName,FString,TArray等等,对于这些自定义的数据类型,我们无法直接查看到这些数据的值,但是我们可以编写VS中的autoexp.dat文件中的脚本,来达到我们需要在调试器中显示的方式。

由于在VS2003中的autoexp.dat脚本不支持表达式,而无法全部满足我们对Unreal引擎中自定义的数据类型的调试显示。经过研究,笔者实现了FColor,FNameEntry,FString的直接显示,但是对于FName的显示,通过调整FName的代码,也实现了其调试显示的需求。

而VS2005、VS2008、VS2010中的autoexp.dat脚本实现了对表达式的支持,基本上可以把Unreal引擎中的所有自定义数据类型直观的显示在调试器中。

VS2005、VS2008、VS2010中的方法如下:

同上打开autoexp.dat文件,在[AutoExpand]下添加如下脚本:

FNameEntry=<Name,su>
;Unreal的FColor
FColor = R=<R,u> G=<G,u> B=<B,u> A=<A,u>  

在[Visualizer]下添加如下脚本:然后就可以在调试中尽情查看以上自定义数据类型的值了。

; Unreal格式的数组
TArray<FString>{
     children
     (
         #array
         (
             expr :    ((FString*)($c.Data))[$i],
             size :     $c.ArrayNum
         )
     )  

     preview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FString*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )  

     stringview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FString*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )
}  

TArrayNoInit<FString>{
     children
     (
         #array
         (
             expr :    ((FString*)($c.Data))[$i],
             size :     $c.ArrayNum
         )
     )  

     preview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FString*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )  

     stringview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FString*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )
}  

; Unreal格式的数组
TArray<FStringNoInit>{
     children
     (
         #array
         (
             expr :    ((FStringNoInit*)($c.Data))[$i],
             size :     $c.ArrayNum
         )
     )  

     preview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FStringNoInit*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )  

     stringview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FStringNoInit*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )
}  

TArrayNoInit<FStringNoInit>{
     children
     (
         #array
         (
             expr :    ((FStringNoInit*)($c.Data))[$i],
             size :     $c.ArrayNum
         )
     )  

     preview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FStringNoInit*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )  

     stringview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr :         [((FStringNoInit*)($e.Data))[$i].Data,su],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )
}  

; Unreal格式的数组
TArray<*>{
     children
     (
         #array
         (
             expr :     (($T1*)($c.Data))[$i],
             size :     $c.ArrayNum
         )
     )  

     preview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr : (($T1*)($c.Data))[$i],
                 size : $c.ArrayNum
             ),
            ")"
         )
     )
}  

; Unreal格式的数组
TArrayNoInit<*>{
     children
     (
         #array
         (
             expr :     (($T1*)($c.Data))[$i],
             size :     $c.ArrayNum
         )
     )  

     preview
     (
         #(
            "[",
             $c.ArrayNum ,
            "](",  

             #array
             (
                 expr : (($T1*)($c.Data))[$i],
                 size :      $c.ArrayNum
             ),
            ")"
         )
     )
}  

; Unreal的FName
FName{
     preview([((FNameEntry**)FName.Names.Data)[$c.Index]->Name,su])
         stringview([((FNameEntry**)FName.Names.Data)[$c.Index]->Name])
}
; Unreal的FString
FString{
     preview([$c.Data,su])
         stringview([$c.Data,su])
}  

; Unreal的FString
FStringNoInit{
     preview([$c.Data,su])
         stringview([$c.Data,su])
}
; Unreal的UObject
UObject{
     preview([((FNameEntry**)FName.Names.Data)[$c.Name.Index]->Name,su])
         stringview([((FNameEntry**)FName.Names.Data)[$c.Name.Index]->Name])
}  

; Unreal的TMap
TMap<*,*>{
     preview(#("size=",[$c.Pairs.ArrayNum,u]))
}  

显示效果如下:

Tips显示方式

时间: 2024-08-06 16:05:23

在Visual Studio调试器中显示Unreal的数据类型的值的相关文章

用Natvis定制C++对象在Visual Studio调试时如何显示

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Natvis定制C++对象在Visual Studio调试时如何显示.

Visual Studio 2008项目中WinForm窗体图标显示为类图标,只能打开代码而无法打开视图问题解决

背景: 今天打开一个Winform项目的时候,图标显示为类文件的样子而不是窗体的样子,在代码中右键也没有View Designer选项,双击图标打开的是代码而非窗体设计界面,百度后也没有找到解决方案. 解决方法(不一定通用): 1.编译项目查看有没有错误. 2.查看WinForm窗体继承的窗体文件可以打开不?有没有问题 3.签出代码,在undocheckout,编译,查看是否可以了 4.查看该项目有没有被其他人签出,如果被签出,让他们签入,再获取一下最新版本代码,编译,看看是不是可以了(我在这一

新手必备!11个强大的 Visual Studio 调试技巧

简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总结了可能节省你大量时间的十个visual studio的调试技巧和方法. 1 悬停鼠标查看表达式值 调试是很有挑战性的.比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等... 但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)

2.5 visual studio调试nodeos

2.5.1 前言   Visual Studio在调试c++程序时,调式信息通是过界面的方式展示出来的,这很方便了我们的开发人员,那么如果只有源代码,而没有把源代码创建成解决方案,比如,linux环境下的C++工程,没有Visual Studio的解决方案工程,那么如何快速的调式这个项目呢?   Visual Studio提供了打开一个代码文件夹,配置一些详细信息来运行和调试文件夹中的代码.下面将详细介绍如何通过打开文件夹的代码开始调式程序. 2.5.2 原理介绍   Visual Studio

用Visual Studio调试Windows和驱动程序

由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:[email protected] MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh406281(v=vs.85).aspx 从Windows Driver Kit (WDK) 8开始,驱动开发环境和Windows调试器都集成到Visual Studio里了.在这个集成环境里,大多数你需要开发驱动的工具:编写代码.编译.打包.测试.调试.发布,都在Visua

Visual Studio调试之断点进阶篇

Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler).IDT是操作系统在启动的时候初始化的,至于IDT的细节问题,例如什么是IDT,怎样编写一个IDT的例程,怎样 初始化IDT,可以去网上搜索一些资料. 总之,这里我们只要知

Visual Studio调试之断点基础篇

原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/09/26/1574311.html 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F-- 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm啦,.ASP.NET之类的程序:知道如何编写固然重要,但是我觉得程序员可能只会花费30%的时间在编写代码上,剩下的大部分时间都是在调试程序.在网上看到很多人介绍Windbg的用法,但是没有看到几篇讲解

Visual studio 调试连接数据库异常解决方法

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Data.SqlClient.SqlException: 在

【调试】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息(转载)

在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量.有时在查看窗口显示的内容不是很直观.为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧.下面是几个例子. 1. Windows消息 在开发调试界面程序时,我们经常需要查看消息的内容.当在查看窗口中,仅仅只显示出消息对应的整数值,我们并不能直观地知道究竟是什么消息.比如: 为了能让查看窗口显示出消息内容,我们只需要在变量名添加“, wm”的格式化后缀,就能显示消息的名字: 2. 句柄返回值