2012-11-19 3 views
0

루아 5.1을 사용하는 C/C++ 응용 프로그램을 디버깅하려고합니다. 이 단계에서 디버깅하는 동안 사람이 읽을 수있는 데이터 표현을 Lua 스택에 덤프하는 방법이 있으면 매우 유용합니다. 나는 올바른 종류의 것으로 보이는 함수 lua_getstack을 찾았지만 LLDB 커맨드 라인을 통해이를 호출하고 인간이 읽을 수있는 것으로 인쇄하는 방법을 찾을 수 없다. 이 작업을 수행하는 더 좋은 방법이 있습니까?Xcode 디버거에서 lua_getstack 호출

답변

3

이 같은 것을 사용하고 디버거에서 호출 할 수 있습니다

void lua_stackdump(lua_State *L) 
{ 
    int i; 
    int top = lua_gettop(L); 
    for (i = 1; i <= top; i++) { /* repeat for each level */ 
    int t = lua_type(L, i); 
    switch (t) { 
     case LUA_TSTRING: { /* strings */ 
     printf("’%s’\n", lua_tostring(L, i)); 
     break; 
     } 
     case LUA_TBOOLEAN: { /* booleans */ 
     printf(lua_toboolean(L, i) ? "true" : "false"); 
     break; 
     } 
     case LUA_TNUMBER: { /* numbers */ 
     printf("%g\n", lua_tonumber(L, i)); 
     break; 
     } 
     default: { /* other values */ 
     printf("%s\n", lua_typename(L, t)); 
     break; 
     } 
    } 
    } 
    printf("\n"); /* end the listing */ 
} 
+0

우수한 감사합니다! 내 인생을 훨씬 쉽게 만들어 줄거야! – benwad

+0

양자 택일로, 스택에 대한 더 많은 정보가 필요하다면,이 스택 덤프와 똑같은, [lua stack walker] (https://github.com/d-led/luastackcrawler)를 사용하고 확장 할 수 있습니다. 스택의 테이블을 따라 내려갑니다. 동일한 디버그는'void trystack (lua_State * L) {LuaStack S; \t CrawlStack (L, S); \t PrintStack (S); }'디버거에서 실제로 실행 가능한 경우를 대비하여 –

관련 문제