您的位置:首页 > 编程语言 > Lua

VS2012以上版本 C++环境查看 lua5.1 栈/Global/Registry的可视化器

2014-11-19 02:19 851 查看

<?xml version="1.0" encoding="utf-8"?>   
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">   
  <Type Name="lua_State">   
    <DisplayString>lua_State</DisplayString>  
    <Expand>  
   <Item Name="[stack size]">top-base</Item>  
   <IndexListItems>  
     <Size>top-base</Size>  
     <ValueNode>base[$i]</ValueNode>  
   </IndexListItems>  
   <Item Name="[globals]">l_gt</Item>  
   <Item Name="[registry]">l_G->l_registry</Item>                 
   <Item Name="[call]" Condition="ci->func->tt!=0">ci->func</Item>  
    </Expand>  
  </Type>   
  <Type Name="Node">   
    <DisplayString>{i_key} = {i_val}</DisplayString>  
    <Expand>  
   <Item Name="[val]">i_val</Item>  
    </Expand>  
  </Type>   
  <Type Name="lua_TValue">   
    <DisplayString Condition="tt==0">nil</DisplayString>  
    <DisplayString Condition="tt==1">{(bool)value.b}</DisplayString>  
    <DisplayString Condition="tt==2">{value.p} lightuserdata</DisplayString>  
    <DisplayString Condition="tt==3">number={value.n}</DisplayString>  
    <DisplayString Condition="tt==4">{value.gc->ts}</DisplayString>  
    <DisplayString Condition="tt==5">{value.gc->h}</DisplayString>  
    <DisplayString Condition="tt==6">function {value.gc->cl}</DisplayString>  
    <DisplayString Condition="tt==7">userdata {value.gc->u}</DisplayString>  
    <DisplayString Condition="tt==8">thread {value.gc->th}</DisplayString>  
    <DisplayString>empty</DisplayString>  
    <Expand>  
   <Item Name="[lightuserdata]" Condition="tt==2">(const char *)value.p</Item>  
   <Item Name="" Condition="tt==5">value.gc->h</Item>  
   <Item Name="[function]" Condition="tt==6">value.gc->cl</Item>  
   <Item Name="[userdata]" Condition="tt==7">value.gc->u</Item>  
   <Item Name="[thread]" Condition="tt==8">value.gc->th</Item>  
    </Expand>  
  </Type>   
  <Type Name="Udata">   
    <DisplayString>userdata</DisplayString>  
  </Type>   
  <Type Name="CClosure">   
    <DisplayString>{f}</DisplayString>  
  </Type>   
  <Type Name="LClosure">   
    <DisplayString>Lua function</DisplayString>  
  </Type>   
  <Type Name="Closure">   
    <DisplayString Condition="c.isC">{c}</DisplayString>  
    <DisplayString Condition="!c.isC">{value.gc->cl.l}</DisplayString>  
  </Type>   
  <Type Name="Table">   
    <DisplayString>table</DisplayString>  
    <Expand>  
   <Item Name="[array size]">sizearray</Item>  
   <Item Name="metatable" Condition="metatable!=0">metatable</Item>  
   <IndexListItems>  
     <Size>sizearray</Size>  
     <ValueNode>array[$i]</ValueNode>  
   </IndexListItems>  
   <IndexListItems>  
     <Size>1<<lsizenode</Size>  
     <ValueNode>node[$i]</ValueNode>  
   </IndexListItems>  
    </Expand>  
  </Type>   
  <Type Name="TString">   
    <DisplayString>{(const char *)(&tsv+sizeof(*this)/sizeof(tsv)),s}</DisplayString>  
  </Type>   
  <Type Name="TKey">  
    <DisplayString>{tvk}</DisplayString>  
  </Type>  
</AutoVisualizer>
将上述代码保存为lua.natvis,放入Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers(你的地址也许不同,可以尝试搜索硬盘stl.natvis)或者C:\Users\用户名\Documents\Visual Studio 2013\Visualizers\

请注意是找到文件夹,不要自己创建。

然后在vs c++环境下,选项要关闭 选项-编辑并继续 功能(这两功能不兼容……)

这样你就也许可以在c++代码中查看lua_State变量了,可以展开查看Registry注册表或全局表

失败的话,你也许要在lua.h后面加载lstate.h文件

(以上配置文件仅支持5.1,若需要5.2请自行***访问http://blog.basemetalgames.com/2013/05/lua-natvis.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: