日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【备忘】visual studio调试状态下显示lua调用栈

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【备忘】visual studio调试状态下显示lua调用栈 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編輯文件:【VS安裝目錄】/Common7/Packages/Debugger/autoexp.dat,在文件最后[hresult]之上的空白插入以下代碼,就可以在 visual studio調(diào)試的時候看到lua的調(diào)用棧、變量信息了

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] )
)
}

  

轉(zhuǎn)載于:https://www.cnblogs.com/konlil/archive/2011/08/04/2127246.html

總結(jié)

以上是生活随笔為你收集整理的【备忘】visual studio调试状态下显示lua调用栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。