转自:https://blog.csdn.net/witton/article/details/5977766
在Unreal引擎中大量使用了自定义的数据类型如:FName,FString,TArray等等,对于这些自定义的数据类型,我们无法直接查看到这些数据的值,但是我们可以编写VS中的autoexp.dat(Common7/Packages/Debugger/autoexp.dat)文件中的脚本,来达到我们需要在调试器中显示的方式。
经过研究,笔者实现了FColor,FNameEntry,FString的直接显示,但是对于FName的显示,通过调整FName的代码,也实现了其调试显示的需求。
VS2010中的autoexp.dat脚本实现了对表达式的支持,基本上可以把Unreal引擎中的所有自定义数据类型直观的显示在调试器中。
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显示方式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述