在Visual Studio调试器中显示Unreal的数据类型的值
在Unreal引擎中大量使用了自定义的数据类型如:FName,FString,TArray等等,对于这些自定义的数据类型,我们无法直接查看到这些数据的值,但是我们可以编写VS中的autoexp.dat文件中的脚本,来达到我们需要在调试器中显示的方式。
由于在VS2003中的autoexp.dat脚本不支持表达式,而无法全部满足我们对Unreal引擎中自定义的数据类型的调试显示。经过研究,笔者实现了FColor,FNameEntry,FString的直接显示,但是对于FName的显示,通过调整FName的代码,也实现了其调试显示的需求。
而VS2005、VS2008、VS2010中的autoexp.dat脚本实现了对表达式的支持,基本上可以把Unreal引擎中的所有自定义数据类型直观的显示在调试器中。
VS2003中的方法如下:
打开VS安装目录下的Common7/Packages/Debugger/autoexp.dat文件,在[AutoExpand]下添加如下脚本:
1FNameEntry=<Name,su>
2;Unreal的FColor
3FColor = R=<R,u> G=<G,u> B=<B,u> A=<A,u>
4FString = <Data,su>
5FName = <operator*(),su> ;注意:调用operator*()函数需要把代码中的断言去掉,否则在查看未初始化的FName变量时会出现异常。
VS2005、VS2008、VS2010中的方法如下:
同上打开autoexp.dat文件,在[AutoExpand]下添加如下脚本:
1FNameEntry=<Name,su>
2;Unreal的FColor
3FColor = R=<R,u> G=<G,u> B=<B,u> A=<A,u>```
4
5
6
7
8在[Visualizer]下添加如下脚本:
; Unreal格式的数组 TArray{ 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{ 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{ 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{ 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显示方式
快速监视显示
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2010/2010-10-31-在Visual-Studio调试器中显示Unreal的数据类型的值/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。