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

时间:2023-12-21 19:44:20

转自: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]))
}

显示效果如下:

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

Tips显示方式

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