在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引擎中的所有自定义数据类型直观的显示在调试器中。

     VS2003中的方法如下:

     打开VS安装目录下的Common7/Packages/Debugger/autoexp.dat文件,在[AutoExpand]下添加如下脚本:

[plain]  view plain copy
  1. FNameEntry=<Name,su>  
  2. ;Unreal的FColor  
  3. FColor = R=<R,u> G=<G,u> B=<B,u> A=<A,u>  
  4. FString = <Data,su>  
  5. FName = <operator*(),su> ;注意:调用operator*()函数需要把代码中的断言去掉,否则在查看未初始化的FName变量时会出现异常。  

    VS2005、VS2008、VS2010中的方法如下:

    同上打开autoexp.dat文件,在[AutoExpand]下添加如下脚本:

[plain]  view plain copy
  1. FNameEntry=<Name,su>  
  2. ;Unreal的FColor  
  3. FColor = R=<R,u> G=<G,u> B=<B,u> A=<A,u>  

在[Visualizer]下添加如下脚本:

[plain]  view plain copy
  1. ; Unreal格式的数组  
  2. TArray<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.   
  45. TArrayNoInit<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格式的数组  
  89. TArray<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.   
  132. TArrayNoInit<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格式的数组  
  176. TArray<*>{  
  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格式的数组  
  204. TArrayNoInit<*>{  
  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  
  232. FName{  
  233.      preview([((FNameEntry**)FName.Names.Data)[$c.Index]->Name,su])  
  234.          stringview([((FNameEntry**)FName.Names.Data)[$c.Index]->Name])  
  235. }  
  236. ; Unreal的FString  
  237. FString{  
  238.      preview([$c.Data,su])  
  239.          stringview([$c.Data,su])  
  240. }  
  241.   
  242. ; Unreal的FString  
  243. FStringNoInit{  
  244.      preview([$c.Data,su])  
  245.          stringview([$c.Data,su])  
  246. }  
  247. ; Unreal的UObject  
  248. UObject{  
  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  
  254. TMap<*,*>{  
  255.      preview(#("size=",[$c.Pairs.ArrayNum,u]))  
  256. }  

然后就可以在调试中尽情查看以上自定义数据类型的值了。



你可能感兴趣的:(调试,Unreal)