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

如何在vs (visual studio)调试环境下查看lua的调用栈、变量信息

2011-08-30 19:00 756 查看
编辑C:/Program Files/Microsoft Visual Studio 8/Common7/Packages/Debugger/autoexp.dat文件,

在文件最后[hresult]之上的空白插入以下代码,就可以在 visualstudio调试的时候看到lua的调用栈、变量信息

lua_State {

preview (

#(

"thread top=", [$c.top-$c.base, i]

)

)

children (

#(

[raw members]: [$c,!],

globals: [$c.l_gt],

registry: [$c.l_G->l_registry],

stack size: [$c.top-$c.base, i],

stack:#array (

expr: $c.base[$i],

size: $c.top - $c.base,

base: 1

),

callStack Size: $e.ci-$e.base_ci,

callStack:

#array (

expr: $e.ci[-$i],

size: $e.ci-$e.base_ci,

)

)

)

}

Node {

preview (

#( $c.i_key.tvk, " = ", $c.i_val )

)

children (

#(

key: $c.i_key.tvk,

val: $c.i_val,

#if( $c.i_key.nk.next != 0 ) (

#( next: $c.i_key.nk.next )

)

)

)

}

lua_TValue {

children (

#switch($c.tt)

#case 2 ( ; LUA_TLIGHTUSERDATA

ptr: #((const char*)($c.value.p))

)

#case 5 ( ; LUA_TTABLE

#(

[raw]: [$c,!],

array size: $c.value.gc->h.sizearray,

#array (

expr: $e.value.gc->h.metatable,

size: $e.value.gc->h.metatable != 0,

): #( metatable: $e ),

#array (

expr: $c.value.gc->h.array[$i],

size: $c.value.gc->h.sizearray,

base: 1

),

#array (

expr: #( $c.value.gc->h.node[$i], 2 ),

size: (1<<$c.value.gc->h.lsizenode),

base: 1

): #( hash part: $e )

)

)

#case 6 ( ; LUA_TFUNCTION

#if ($c.value.gc->cl.c.isC) (

#(

env: $c.value.gc->cl.c.env,

#array (

expr: $e.value.gc->cl.c.upvalue[$i],

size: $e.value.gc->cl.c.nupvalues,

): #( upvalues: $e )

)

) #else (

#($c.value.gc->cl.l)

)

)

#case 7 ( ; LUA_TUSERDATA

#(

#array (

expr: $e.value.gc->u.uv.metatable,

size: $e.value.gc->u.uv.metatable != 0,

): #( metatable: $e ),

env: $c.value.gc->u.uv.env,

ptr: #((const char*)((&$c.value.gc->u)+1)),

size: $c.value.gc->u.uv.len

)

)

#case 8 ( #($c.value.gc->th) ) ; LUA_TTHREAD

)

preview (

#switch($c.tt)

#case 0 ( "nil" ) ; LUA_TNIL

#case 1 (

#if ($c.value.b == 0) (

"false"

) #else (

"true"

)

)

#case 2 ( ; LUA_TLIGHTUSERDATA

#($c.value.p, " lightuserdata") )

#case 3 ( ; LUA_TNUMBER

#("#", $c.value.n) )

#case 4 ( ; LUA_TRING

#( $c.value.gc->ts) )

#case 5 ( ; LUA_TTABLE

#( "table" )

)

; #case 6 ( #($c.value.gc->cl) ) ; LUA_TFUNCTION

#case 6 ( ; LUA_TFUNCTION

#if ($c.value.gc->cl.c.isC) (

#($c.value.gc->cl)

) #else (

#( [((const char *) (&($e.value.gc->cl.l.p->source->tsv)+1)),sb],"(" ,*($e.value.gc->cl.l.p->lineinfo),")" )

)

)

#case 7 ( #($c.value.gc->u) ) ; LUA_TUSERDATA

#case 8 ( #($c.value.gc->th) ) ; LUA_TTHREAD

#default ( "empty" )

)

)

}

Udata {

preview (

#( "userdata size=", $c.uv.len, " ptr=", #((void*)((&$c)+1)) )

)

}

CClosure {

preview (

$c.f

)

}

LClosure {

preview (

#([(const char *) (&($e.p->source->tsv)+1),sb] ,"(",*($e.p->lineinfo),")" )

)

}

Closure {

preview (

#if ($e.c.isC) ( #($e.c) )

#else ( #($e.value.gc->cl.l) )

)

}

Table {

children (

#(

[raw]: [$c,!],

[array size]: $c.sizearray,

#array (

expr: $e.metatable,

size: $e.metatable != 0,

): #( metatable: $e ),

#array (

expr: $c.array[$i],

size: $c.sizearray,

base: 1

),

#array (

expr: #( $c.node[$i], 2 ),

size: (1<<$c.lsizenode),

base: 1

): #( key: $e )

)

)

preview (

#( "table" )

)

}

TString {

preview (

#("'", [(const char *) (&($e.tsv)+1),sb] )

)

}

CallInfo {

preview (

#( $e.func, ",",$e.func->value.gc->cl.l.p->lineinfo[$e.savedpc -$e.func->value.gc->cl.l.p->code-1] )

)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: