在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>
在[Visualizer]下添加如下脚本:
1; Unreal格式的数组
2TArray<FString>{
3 children
4 (
5 #array
6 (
7 expr : ((FString*)($c.Data))[$i],
8 size : $c.ArrayNum
9 )
10 )
11
12 preview
13 (
14 #(
15 "[",
16 $c.ArrayNum ,
17 "](",
18
19 #array
20 (
21 expr : [((FString*)($e.Data))[$i].Data,su],
22 size : $c.ArrayNum
23 ),
24 ")"
25 )
26 )
27
28 stringview
29 (
30 #(
31 "[",
32 $c.ArrayNum ,
33 "](",
34
35 #array
36 (
37 expr : [((FString*)($e.Data))[$i].Data,su],
38 size : $c.ArrayNum
39 ),
40 ")"
41 )
42 )
43}
44
45TArrayNoInit<FString>{
46 children
47 (
48 #array
49 (
50 expr : ((FString*)($c.Data))[$i],
51 size : $c.ArrayNum
52 )
53 )
54
55 preview
56 (
57 #(
58 "[",
59 $c.ArrayNum ,
60 "](",
61
62 #array
63 (
64 expr : [((FString*)($e.Data))[$i].Data,su],
65 size : $c.ArrayNum
66 ),
67 ")"
68 )
69 )
70
71 stringview
72 (
73 #(
74 "[",
75 $c.ArrayNum ,
76 "](",
77
78 #array
79 (
80 expr : [((FString*)($e.Data))[$i].Data,su],
81 size : $c.ArrayNum
82 ),
83 ")"
84 )
85 )
86}
87
88; Unreal格式的数组
89TArray<FStringNoInit>{
90 children
91 (
92 #array
93 (
94 expr : ((FStringNoInit*)($c.Data))[$i],
95 size : $c.ArrayNum
96 )
97 )
98
99 preview
100 (
101 #(
102 "[",
103 $c.ArrayNum ,
104 "](",
105
106 #array
107 (
108 expr : [((FStringNoInit*)($e.Data))[$i].Data,su],
109 size : $c.ArrayNum
110 ),
111 ")"
112 )
113 )
114
115 stringview
116 (
117 #(
118 "[",
119 $c.ArrayNum ,
120 "](",
121
122 #array
123 (
124 expr : [((FStringNoInit*)($e.Data))[$i].Data,su],
125 size : $c.ArrayNum
126 ),
127 ")"
128 )
129 )
130}
131
132TArrayNoInit<FStringNoInit>{
133 children
134 (
135 #array
136 (
137 expr : ((FStringNoInit*)($c.Data))[$i],
138 size : $c.ArrayNum
139 )
140 )
141
142 preview
143 (
144 #(
145 "[",
146 $c.ArrayNum ,
147 "](",
148
149 #array
150 (
151 expr : [((FStringNoInit*)($e.Data))[$i].Data,su],
152 size : $c.ArrayNum
153 ),
154 ")"
155 )
156 )
157
158 stringview
159 (
160 #(
161 "[",
162 $c.ArrayNum ,
163 "](",
164
165 #array
166 (
167 expr : [((FStringNoInit*)($e.Data))[$i].Data,su],
168 size : $c.ArrayNum
169 ),
170 ")"
171 )
172 )
173}
174
175; Unreal格式的数组
176TArray<*>{
177 children
178 (
179 #array
180 (
181 expr : (($T1*)($c.Data))[$i],
182 size : $c.ArrayNum
183 )
184 )
185
186 preview
187 (
188 #(
189 "[",
190 $c.ArrayNum ,
191 "](",
192
193 #array
194 (
195 expr : (($T1*)($c.Data))[$i],
196 size : $c.ArrayNum
197 ),
198 ")"
199 )
200 )
201}
202
203; Unreal格式的数组
204TArrayNoInit<*>{
205 children
206 (
207 #array
208 (
209 expr : (($T1*)($c.Data))[$i],
210 size : $c.ArrayNum
211 )
212 )
213
214 preview
215 (
216 #(
217 "[",
218 $c.ArrayNum ,
219 "](",
220
221 #array
222 (
223 expr : (($T1*)($c.Data))[$i],
224 size : $c.ArrayNum
225 ),
226 ")"
227 )
228 )
229}
230
231; Unreal的FName
232FName{
233 preview([((FNameEntry**)FName.Names.Data)[$c.Index]->Name,su])
234 stringview([((FNameEntry**)FName.Names.Data)[$c.Index]->Name])
235}
236; Unreal的FString
237FString{
238 preview([$c.Data,su])
239 stringview([$c.Data,su])
240}
241
242; Unreal的FString
243FStringNoInit{
244 preview([$c.Data,su])
245 stringview([$c.Data,su])
246}
247; Unreal的UObject
248UObject{
249 preview([((FNameEntry**)FName.Names.Data)[$c.Name.Index]->Name,su])
250 stringview([((FNameEntry**)FName.Names.Data)[$c.Name.Index]->Name])
251}
252
253; Unreal的TMap
254TMap<*,*>{
255 preview(#("size=",[$c.Pairs.ArrayNum,u]))
256}
然后就可以在调试中尽情查看以上自定义数据类型的值了。
显示效果如下:
Tips显示方式
快速监视显示
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2010/2010-10-31-在Visual-Studio调试器中显示Unreal的数据类型的值/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。