보조 디버깅
int main()
{
DEBUGFLAG
return 0;
}
:main{
}
출력된 함수 이름은 축진 형식을 띠고 함수체를 괄호로 표시한다.이런 격식은 함수 간의 호출 관계를 뚜렷하게 볼 수 있다.다음lua.c의 호출 관계.
main{
pmain{
collectargs{
}
handle_luainit{
}
runargs{
}
handle_script{
getargs{
}
docall{
}
report{
}
}
}
finalreport{
}
}
루아 스크립트를 통해 모든 함수의 디버깅 행위를 제어한다. 다음은 루아를 제어한다.c의 루아 스크립트, 이런 스크립트를 만드는 것은 매우 간단합니다. 함수의 이름은 VS2012의 클래스 보기에서 대량으로 복사하고 붙일 수 있으며 하나하나의 입력이 필요하지 않습니다.--act: 1 assert, 2 printf, 3 fprintf
funcTable =
{
dbg_collectargs = 2
,dbg_docall = 2
,dbg_dofile = 2
,dbg_dolibrary = 2
,dbg_dostring = 2
,dbg_dotty = 2
,dbg_finalreport = 2
,dbg_get_prompt = 2
,dbg_getargs = 2
,dbg_handle_luainit = 2
,dbg_handle_script = 2
,dbg_incomplete = 2
,dbg_l_message = 2
,dbg_l_sin = 2
,dbg_laction = 2
,dbg_loadline = 2
,dbg_lstop = 2
,dbg_main = 2
,dbg_pmain = 2
,dbg_print_usage = 2
,dbg_print_version = 2
,dbg_pushline = 2
,dbg_report = 2
,dbg_runargs = 2
,dbg_stackDump = 2
}
for key, value in pairs(funcTable) do
funcTable[key] = 3
end
쉽게 구분하기 위해 함수마다 "dbg"선두에 서다.Action 함수는 논리 처리를 실현합니다. 루아 스크립트에서 이 함수 이름의value를 찾고,value의 값에 따라 assert로 되돌아오거나 텍스트로 출력합니다.나는 Action에서 assert를 직접 진행하지 않았다. 왜냐하면 이것은 매번 끊어진 위치가 Action에서 발생하기 때문에 좀 번거롭기 때문이다.g_callStackIndex는 현재 창고의 깊이를 기록하는 데 사용되며, 깊이가 출력 결과에 반영되면 함수 이름 앞의 빈칸입니다.//act: 1 assert, 2 printf, 3 fprintf
int Action(const char *funName)
{
if(Debug_GL == NULL)InitGL();
char tname[100];
sprintf(tname, "dbg_%s", funName);
lua_getfield(Debug_GL, -1, tname);
if(!lua_isnumber(Debug_GL, -1))
{
return 0;
}
int act = lua_tointeger(Debug_GL, -1);
lua_pop(Debug_GL, 1);
if(act == 1) ;
else if(act == 2)
{
for(int i = 0; i < g_callStackIndex; i ++)
printf(" ");
printf("%s{
", funName);
}
else if(act == 3)
{
for(int i = 0; i < g_callStackIndex; i ++)
fprintf(Debug_fp, " ");
fprintf(Debug_fp, "%s{
", funName);
}
return act;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.