zoukankan      html  css  js  c++  java
  • 在Visual Studio调试器中显示Unreal的数据类型的值

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

    显示效果如下:

     

    Tips显示方式

     

  • 相关阅读:
    桥牌笔记:双挤
    打造GTD style的办公环境 V1.0
    《Two Dozen Short Lessons in Haskell》学习(四)
    跑步机到了,看能坚持多久
    《Two Dozen Short Lessons in Haskell》学习(十) Private Definitions — the whereclause
    赶在世界末日前完成的2012年全年总结
    《Two Dozen Short Lessons in Haskell》学习(三)
    《Two Dozen Short Lessons in Haskell》学习(六)
    《Two Dozen Short Lessons in Haskell》学习(二)
    桥牌笔记:进手张
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/7044362.html
Copyright © 2011-2022 走看看