首页 > 代码库 > 在Visual Studio调试器中显示Unreal的数据类型的值

在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显示方式

 

技术分享

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