
编辑C:/Program Files/Microsoft Visual Studio 8/Common7/Packages/Debugger/autoexpdat文件,
在文件最后[hresult]之上的空白插入以下代码,就可以在 visualstudio调试的时候看到lua的调用栈、变量信息
lua_State {
preview (
#(
"thread top=", [$ctop-$cbase, i]
)
)
children (
#(
[raw members]: [$c,!],
globals: [$cl_gt],
registry: [$cl_G->l_registry],
stack size: [$ctop-$cbase, i],
stack:#array (
expr: $cbase[$i],
size: $ctop - $cbase,
base: 1
),
callStack Size: $eci-$ebase_ci,
callStack:
#array (
expr: $eci[-$i],
size: $eci-$ebase_ci,
)
)
)
}
Node {
preview (
#( $ci_keytvk, " = ", $ci_val )
)
children (
#(
key: $ci_keytvk,
val: $ci_val,
#if( $ci_keynknext != 0 ) (
#( next: $ci_keynknext )
)
)
)
}
lua_TValue {
children (
#switch($ctt)
#case 2 ( ; LUA_TLIGHTUSERDATA
ptr: #((const char)($cvaluep))
)
#case 5 ( ; LUA_TTABLE
#(
[raw]: [$c,!],
array size: $cvaluegc->hsizearray,
#array (
expr: $evaluegc->hmetatable,
size: $evaluegc->hmetatable != 0,
): #( metatable: $e ),
#array (
expr: $cvaluegc->harray[$i],
size: $cvaluegc->hsizearray,
base: 1
),
#array (
expr: #( $cvaluegc->hnode[$i], 2 ),
size: (1<<$cvaluegc->hlsizenode),
base: 1
): #( hash part: $e )
)
)
#case 6 ( ; LUA_TFUNCTION
#if ($cvaluegc->clcisC) (
#(
env: $cvaluegc->clcenv,
#array (
expr: $evaluegc->clcupvalue[$i],
size: $evaluegc->clcnupvalues,
): #( upvalues: $e )
)
) #else (
#($cvaluegc->cll)
)
)
#case 7 ( ; LUA_TUSERDATA
#(
#array (
expr: $evaluegc->uuvmetatable,
size: $evaluegc->uuvmetatable != 0,
): #( metatable: $e ),
env: $cvaluegc->uuvenv,
ptr: #((const char)((&$cvaluegc->u)+1)),
size: $cvaluegc->uuvlen
)
)
#case 8 ( #($cvaluegc->th) ) ; LUA_TTHREAD
)
preview (
#switch($ctt)
#case 0 ( "nil" ) ; LUA_TNIL
#case 1 (
#if ($cvalueb == 0) (
"false"
) #else (
"true"
)
)
#case 2 ( ; LUA_TLIGHTUSERDATA
#($cvaluep, " lightuserdata") )
#case 3 ( ; LUA_TNUMBER
#("#", $cvaluen) )
#case 4 ( ; LUA_TRING
#( $cvaluegc->ts) )
#case 5 ( ; LUA_TTABLE
#( "table" )
)
; #case 6 ( #($cvaluegc->cl) ) ; LUA_TFUNCTION
#case 6 ( ; LUA_TFUNCTION
#if ($cvaluegc->clcisC) (
#($cvaluegc->cl)
) #else (
#( [((const char ) (&($evaluegc->cllp->source->tsv)+1)),sb],"(" ,($evaluegc->cllp->lineinfo),")" )
)
)
#case 7 ( #($cvaluegc->u) ) ; LUA_TUSERDATA
#case 8 ( #($cvaluegc->th) ) ; LUA_TTHREAD
#default ( "empty" )
)
)
}
Udata {
preview (
#( "userdata size=", $cuvlen, " ptr=", #((void)((&$c)+1)) )
)
}
CClosure {
preview (
$cf
)
}
LClosure {
preview (
#([(const char ) (&($ep->source->tsv)+1),sb] ,"(",($ep->lineinfo),")" )
)
}
Closure {
preview (
#if ($ecisC) ( #($ec) )
#else ( #($evaluegc->cll) )
)
}
Table {
children (
#(
[raw]: [$c,!],
[array size]: $csizearray,
#array (
expr: $emetatable,
size: $emetatable != 0,
): #( metatable: $e ),
#array (
expr: $carray[$i],
size: $csizearray,
base: 1
),
#array (
expr: #( $cnode[$i], 2 ),
size: (1<<$clsizenode),
base: 1
): #( key: $e )
)
)
preview (
#( "table" )
)
}
TString {
preview (
#("'", [(const char ) (&($etsv)+1),sb] )
)
}
CallInfo {
preview (
#( $efunc, ",",$efunc->valuegc->cllp->lineinfo[$esavedpc -$efunc->valuegc->cllp->code-1] )
)
}
local file = assert( ioopen( "F:/filenametxt" , "r" ) );
local result = {};
for line in file:lines() do
result[#result+1] = line;
end
file:close() --看情况关闭与否
至于你说的赋给变量 就从result里面取出来就ok了,key就是行号。
能。lua可以设置和读取Lua的变量,可以注册C函数让Lua代码调用,lua语言盘符名字能读取,Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
首先调用变量这个说法本身就是很奇怪,如果说LUA的函数可以说是变量的话,那么你的意思就是调用CCC这个函数的,但是函数不可能保存角色坐标,所以你这个事实上只是一个变量。很可能是个table,那么应该叫访问这个变量而不是调用。
C里面访问LUA的数值变量和访问table的方法是不一样的,访问table还要知道table的结构才能访问
以下为我的模拟代码,仅供参考
lua_State L = luaL_newstate();
luaL_openlibs(L);
luaL_dostring(L,
"CCC = {}"
"CCCposition = {10,20}"
);
lua_getglobal(L, "CCC");//将CCC压入栈顶
lua_getfield(L, -1, "position");//对栈顶进行 *** 作,将position压入栈顶
lua_pushnumber(L, 1);//索引1
lua_gettable(L, -2);
int x = luaL_checkinteger(L,-1);
lua_pushnumber(L, 2);//索引2
lua_gettable(L, -3);
int y = luaL_checkinteger(L,-1);
lua_pop(L, -1);
printf("x:%d y:%d\n",x,y);
lua_close(L);
变量就是存值的一个空间,变量需要声明。
变量是储存值的地方。 程序中有三种变量: 全局变量、局部变量和表的域。
单个名字可以指代一个全局变量也可以指代一个局部变量 (或者是一个函数的形参,这是一种特殊形式的局部变量)。
名字指 程序中定义的标识符。
所有没有显式声明为局部变量 的变量名都被当做全局变量。 局部变量有其 作用范围 : 局部变量可以被定义在它作用范围中的函数自由使用。
在变量的首次赋值之前,变量的值均为 nil。
方括号被用来对表作索引:
对全局变量以及表的域之访问的含义可以通过元表来改变。 以索引方式访问一个变量 t[i] 等价于 调用 gettable_event(t,i)。 ,有一份完整的关于 gettable_event 函数的说明。 这个函数并没有在 lua 中定义出来,也不能在 lua 中调用。这里我们把提到它只是方便说明问题。)
varName 这种语法只是一个语法糖,用来表示 var["Name"]:
对全局变量 x 的 *** 作等价于 *** 作 _ENVx。 由于代码块编译的方式, _ENV 永远也不可能是一个全局名字
个名字可以指代一个全局变量也可以指代一个局部变量 (或者是一个函数的形参,这是一种特殊形式的局部变量)。
名字指 程序中定义的标识符。
所有没有显式声明为局部变量 的变量名都被当做全局变量。 局部变量有其 作用范围 : 局部变量可以被定义在它作用范围中的函数自由使用。
变量就是存值的一个空间,变量需要声明。
变量是储存值的地方。 程序中有三种变量: 全局变量、局部变量和表的域。
单个名字可以指代一个全局变量也可以指代一个局部变量 (或者是一个函数的形参,这是一种特殊形式的局部变量)。
名字指 程序中定义的标识符。
所有没有显式声明为局部变量 的变量名都被当做全局变量。 局部变量有其 作用范围 : 局部变量可以被定义在它作用范围中的函数自由使用。
在变量的首次赋值之前,变量的值均为 nil。
方括号被用来对表作索引:
对全局变量以及表的域之访问的含义可以通过元表来改变。 以索引方式访问一个变量 t[i] 等价于 调用 gettable_event(t,i)。 ,有一份完整的关于 gettable_event 函数的说明。 这个函数并没有在 lua 中定义出来,也不能在 lua 中调用。这里我们把提到它只是方便说明问题。)
varName 这种语法只是一个语法糖,用来表示 var["Name"]:
对全局变量 x 的 *** 作等价于 *** 作 _ENVx。 由于代码块编译的方式, _ENV 永远也不可能是一个全局名字
个名字可以指代一个全局变量也可以指代一个局部变量 (或者是一个函数的形参,这是一种特殊形式的局部变量)。
名字指 程序中定义的标识符。
所有没有显式声明为局部变量 的变量名都被当做全局变量。 局部变量有其 作用范围 : 局部变量可以被定义在它作用范围中的函数自由使用。
以上就是关于如何在vsvisualstudio调试环境下查看lua的调用栈,变量信息全部的内容,包括:如何在vsvisualstudio调试环境下查看lua的调用栈,变量信息、lua 如何 读取文本的每一行,输入到指定的变量里、lua语言盘符名字能不能读取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)