모듈:단순 디버그
ModuleLua 모듈을 디버깅하는 데 도움이 되는 기능이 포함되어 있습니다.모듈(일반적인) 또는 여러 모듈(메인 모듈에서 필요한)에서 루아 프로그램의 여러 변수 및/또는 포인트 값을 수집하고 볼 수 있습니다.
디버깅할 모듈 내에서 함수가 호출되도록 설계되었으며, 사용자가 삭제하기로 결정할 때까지 코드의 일부가 되어야 하는 호출(설계한 모듈의 호출 또는 버그를 이미 확인한 경우)입니다.따라서 호출에서 함수를 호출할 필요가 없습니다.
사용하다
| 한 가지 또는 여러 가지 관전 포인트 | ||
|---|---|---|
기능 약어:w어디서n이름들v변수s현을 매다 | ||
| 변수 | ||
| 이름. | 체납 | |
tab.oneline | 진실의 |
|
tab.allidx | 거짓의 | true이면 테이블의 숫자 인덱스도 표시합니다. |
dec | -1 | 소수점 이하의 공백:
|
enabled | 진실의 | 거짓일 경우 아래 기능에 대한 모든 호출은 아무것도 수행하지 않습니다. |
nohtml | 거짓의 | 문자열에서는 < for ⪡, >를 ⪢로 바꿉니다. |
plaintext | 거짓의 | HTML 형식을 삭제합니다. |
| 한 가지 관전 포인트 | ||
| 기능들 | ||
w (where) |
| |
v (...) |
| |
wv (where, ...) |
| |
nv (...) |
| |
wnv (where, ...) |
| |
| 주목해야 할 몇 가지 | ||
| 변수 | ||
| 이름. | 체납 | |
s | 다음 함수에서 반환된 값을 유지하는 문자열 변수입니다. | |
maxlines.num | 100 | (다음 함수를 호출할 때) 최대 회선 수입니다. |
maxlines.doerror | 진실의 | 만약 그것이 사실이라면 그리고. |
counter | 거짓의 | 함수의 각 호출 시작 부분에 자동 증분 번호를 추가합니다. |
| 기능들 | ||
breakline () | 브레이크라인을 추가합니다. | |
wtos (where) | 같음 | |
vtos (...) | 같음 | |
wvtos (where, ...) | 같음 | |
nvtos (...) | 같음 | |
wnvtos (where, ...) | 이과알라 | |
예
한 가지 관전 포인트
흐름을 따라가기
현지의 SD = 요구하다 "모듈:단순 디버그" 돌아가다 SD.v ('여기에 도달했습니다.') 반환:
여기에 도달했습니다.
변수의 소수 자릿수 및 값
현지의 SD = 요구하다 "모듈:단순 디버그" SD.데크 = 2 돌아가다 SD.v (1/3) 반환:
0.33
노트ml
현지의 SD = 요구하다 "모듈:단순 디버그" SD.nohtml = 진실의 돌아가다 SD.v ("대담한") 반환:
"⪡b⪢bold⪢/b⪡"
일반 텍스트
현지의 SD = 요구하다 "모듈:단순 디버그" SD.평이한 텍스트 = 진실의 돌아가다 SD.v ("대담한") 반환:
"대담한"
여러 변수의 값
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = 12 현지의 b = '안녕하세요' 돌아가다 SD.v (a,b) 반환:
12 • "안녕하세요"
할당되지 않은 변수 탐지
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = 진실의 돌아가다 SD.v (a,b) 반환:
참 • 0
표의 값
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = {1, 탭=a., 'b'} 돌아가다 SD.v (a) 반환: {1, "b", [tab]="a", }
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = {{1,2,3},{4,5,6},{7,8,9}} 돌아가다 SD.v (a) 반환:
{ [1] = {1, 2, 3, }, [2] = {4, 5, 6, }, [3] = {7, 8, 9, }, }
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = {{첫번째=1,2,3},{4,둘째=5,6},{7,8,9}} 돌아가다 SD.v (a) 반환:
[1] = {2, 3, [첫 번째] = 1, }, [2] = {4, 6, [두 번째] = 5, }, [3] = {7, 8, 9, }}
현지의 SD = 요구하다 "모듈:단순 디버그" SD.탭.모든 지수 = 진실의 현지의 a = {{1,2,3},{4,영의,6},{7,8,9}} 돌아가다 SD.v (a) 반환:
{ [1]={[1]=1, [2]=2, [3]=3, }, [2]={[1]=4, [3]=6, }, [3]={[1]=7, [2]=8, [3]=9, }, }
일반적으로 오류 기능을 사용하여 다음 기능을 구현합니다.
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = {{1,2,3},{4,5,6},{7,8,9}} 오류 (SD.v (a)) 디스플레이:
Lua 오류:모듈:사용자의 모듈:선:{
[1] = {1, 2, 3, },
[2] = {4, 5, 6, },
[3] = {7, 8, 9, },
}
여러 줄로 된 테이블의 모든 값
현지의 SD = 요구하다 "모듈:단순 디버그" SD.탭.한 줄 = 거짓의 현지의 a = {{첫번째=1,2,3},'중간',{4,둘째=5,6}} 돌아가다 SD.v (a) 반환:
[1] = {[1] = 2, [2] = 3, ["첫 번째"] = 1, = [2] = "중간", [3] = {[1] = 4, [2] = 6, [두 번째"] ▁5 5, }
점에 이름이 있는 여러 변수의 값
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 a = 12 현지의 b = '안녕하세요' 돌아가다 SD.nv (a.,a,'b',b) 반환:
a: 12 • b: "안녕하세요"
주목해야 할 몇 가지
흐름을 따라가기
현지의 SD = 요구하다 "모듈:단순 디버그" 현지의 탭 = {1,12,7} 기능. p.값 확인 () 현지의 기능. 리틀넘() SD.위토스 ('소수') 끝. 현지의 기능. 빅넘(번호) SD.위토스 ('big='..번호) 끝. 위해서 i, 번호 에 짝을 짓다(탭) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 번호 > 9 그리고나서 빅넘(번호) 또 다른 리틀넘() 끝. 끝. 오류 (SD.s) 끝. 반환:
Lua 오류:모듈:모듈:선:
적은 수
big=12
소수
카운터 포함
현지의 SD = 요구하다 "모듈:단순 디버그" 기능. 증분() 현지의 n = 0 위해서 i = 1, 3 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 n = n + 2 SD.vtos (n) 끝. 끝. SD.계산대 = 진실의 증분() 돌아가다 SD.s 반환:
1 • 2
2 • 4
3 • 6
여러 변수의 모니터링
현지의 SD = 요구하다 "모듈:단순 디버그" a = 12 b = '안녕하세요' SD.vtos (1,a,b) a = a + a b = b..세상!' SD.vtos ('드디어',a,b) 돌아가다 SD.s 반환:
1 => 12 • "안녕하세요"
마침내 => 24 • "안녕하세요!"
현지의 SD = 요구하다 "모듈:단순 디버그" SD.브레이크라인 () a = 12 b = '안녕하세요' c = 거짓의 SD.nvtos (1,a.,a,'b',b,다,c) a = a + a b = b..세상!' SD.nvtos ('드디어',a.,a,'b',b) 오류 (SD.s) 디스플레이:
Lua 오류:모듈:사용자의 모듈:선:
1 => a: 12 • b: "안녕하세요" • c: 거짓
마지막으로 => a: 24 • b: "안녕하세요!"
변수 및 조건을 포함한 표현
현지의 SD = 요구하다 "모듈:단순 디버그" SD.브레이크라인() SD.가능한 = 거짓의 SD.최고선.번호 = 3 현지의 a = 'AA' 위해서 i = 1, 10 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 a = a + 'AA' 한다면 i == 3 그리고나서 SD.가능한 = 진실의 끝. SD.nvtos (i, string.len(a), a) 끝. 디스플레이:
Lua 오류:모듈:사용자의 모듈:선:
3 => 8 • "AAAAAAAAA"
4 => 10 • "AAAAAAAAAAA"
5 => 12 • "AAAAAAAAAAAAA".
--2020-06-16 vtos(vtos)에서 오류를 수정한 후 2개의 0이 표시되었습니다. --2020-06-08 변수가 지금 함수인 경우 함수로 표시됩니다("함수" 이전). --2020-06-06 값 == 0일 때 가끔 발생하는 수정 오류 현지의 p = {} p.s = '' p.탭 = { 한 줄 = 진실의, 모든 지수 = 거짓의, } p.데크 = -1 p.최고선 = { 번호 = 100, 잘못을 저지르다 = 진실의, } p.가능한 = 진실의 p.노비키 = 거짓의 p.nohtml = 거짓의 p._임시 텍스트 = 거짓의 p.계산대 = 거짓의 현지의 린 수 = 0 현지의 벳프 = ' • ' 현지의 기능. 메스 레이즈드 (n) 돌아가다 '\n\n'에 도달했습니다...n.."maxlines.num"을 사용하여 이 제한을 변경할 수 있습니다. 끝. 현지의 기능. 화살() 돌아가다 ' => ' 끝. 기능. p.브레이크라인 () 린 수 = 린 수 + 1 p.s = p.s..'\n\n' 한다면 p.계산대 그리고나서 p.s = p.s..린 수..벳프 끝. 한다면 (린 수 > p.최고선.번호) 그리고. p.최고선.잘못을 저지르다 그리고나서 p.파 = p.s..메스 레이즈드(p.최고선.번호) 오류 (p.s,0) 끝. 끝. -- 브레이크라인 현지의 기능. 이름 확인 (wn, 무엇을) 한다면 wn == 영의 그리고나서 돌아가다 '"'..무엇을..== 0' 그렇지 않으면 (유형(wn) == "테이블") 그리고나서 돌아가다 '표: "..무엇을..'"!' 또 다른 돌아가다 wn 끝. 끝. --이름 확인 기능. p._지루한 (본문) --"모듈:일반 텍스트" 한다면 것은 아니다. 본문 그리고나서 돌아가다 끝. 본문 = mw.본문.마커스를 죽입니다.(본문) :gsub(' ', ' ') --nbsp 공백을 정규 공백으로 바꿉니다. :gsub('<br?/?>', ', ') --br을 쉼표로 바꿉니다. :gsub('<span.->(.)</span>', '%1') --텍스트를 안에 둔 채로 스팬을 제거 :gsub('<b>(.-)/b>, '%1') --텍스트를 안쪽에 둔 상태에서 굵게 표시 안 함 :gsub('<i>(.</i>)', '%1') --텍스트를 내부에 유지하면서 기울임꼴 제거 :gsub('<sub>(.-)</sub>, '%1') --텍스트를 안쪽에 둔 상태에서 굵게 표시 안 함 :gsub('.-(.)//sup', '%1') --텍스트를 안쪽에 둔 상태에서 굵게 표시 안 함 :gsub('<.->.-<.->', '') --나머지 태그와 내부 텍스트를 제외합니다. :gsub('<.->', '') --다른 태그 마크업 제거 :gsub('%[%[%s*[Fff]파일%s*:.%]%]', '') --파일을 삭제합니다. :gsub('%[%[%s*[II]mage%s*:.%]%]', '') --이미지 사용을 금지합니다. :gsub('%[%[%s*[Cc] 범주 %s*:.%]%]', '') -- 카테고리를 분류합니다. :gsub('%[%[[^%]]- ', '') -- 파이프 링크 텍스트를 출력합니다. :gsub('[%[%]]', '') --그런 다음 남은 [ 및 ]를 제거합니다. :gsub("'''''", "") --굵은 이탤릭체 마크업을 강조합니다. :gsub("'''?", "") --not stripping ' ' 은 따옴표에 굵은 글씨로 표시된 텍스트에 대해 올바른 출력을 제공합니다. :gsub('----', '') --제거 ----라인 :gsub("^%s+", "") --대단히 선두에 있는 :gsub(%s+$", "") --및 후행 공백 :gsub(%s+", " ") --중복된 공간 확보 돌아가다 본문 끝. --비공식적인 기능. p._flen_len (본문) 돌아가다 mw.ustring.렌 (p._지루한(본문)) 끝. 기능. p.평지 (틀) 돌아가다 p._지루한 (틀.논병아리[1]) 끝. 기능. p.플레인_렌 (틀) 돌아가다 p._flen_len (틀.논병아리[1]) 끝. 현지의 기능. 문자로 (본문) 한다면 p._임시 텍스트 그리고나서 돌아가다 p._지루한 (본문) 또 다른 돌아가다 본문 끝. 끝. --텍스트로 현지의 기능. NumToStr (N) 한다면 (p.데크 == -1) 또는 (N == 수학.플로어(N)) 그리고나서 돌아가다 끈으로 묶는(N) 또 다른 돌아가다 끈으로 묶는 (수학.플로어 ((N*10^p.데크)+0.5) / (10^p.데크)) 끝. 끝. --NumToStr 현지의 iiTab1Line = 진실의 기능. p.표 포함 (술병) 결과 = 거짓의 위해서 k,v 에 쌍들(술병) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 유형(v) == '탁자' 그리고나서 결과 = 진실의 브레이크. 끝. 끝. 돌아가다 결과 끝. -- 표 포함 현지의 넝쿨 현지의 기능. 덤프 탭 (티블, 들여쓰기) 한다면 것은 아니다. 들여쓰기 그리고나서 들여쓰기 = 1 끝. 현지의 인쇄하기 위해 = " {\r\n" 들여쓰기 = 들여쓰기 + 2 위해서 k, v 에 쌍들(티블) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 인쇄하기 위해 = 인쇄하기 위해..string.rep(" ", 들여쓰기) 현지의 이드 = k 한다면 (유형(k) == "문자열") 그리고나서 k = '"'..k..'"' 끝. 인쇄하기 위해 = 인쇄하기 위해.."["..k.."] = " 한다면 (유형(v) == "숫자") 그리고나서 인쇄하기 위해 = 인쇄하기 위해..NumToStr(v)..",\r\n" 그렇지 않으면 (유형(v) == "문자열") 그리고나서 인쇄하기 위해 = 인쇄하기 위해.."\""..문자로(v).."\",\r\n" 그렇지 않으면 (유형(v) == "테이블") 그리고나서 한다면 iiTab1Line 그리고. (것은 아니다. p.표 포함 (v)) 그리고나서 현지의 와드스 = '{' 위해서 ㅋㅋ,vv 에 쌍들(v) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 (p.탭.모든 지수 == 진실의) 또는 (유형(ㅋㅋ) ~= '숫자') 그리고나서 와드스 = 와드스..'['..ㅋㅋ..']='..넝쿨(vv)..', ' 또 다른 와드스 = 와드스..넝쿨(vv)..', ' 끝. 끝. 인쇄하기 위해 = 인쇄하기 위해..와드스.."},\r\n" 또 다른 인쇄하기 위해 = 인쇄하기 위해..덤프 탭(v, 들여쓰기 + 2)..",\r\n" 끝. 또 다른 인쇄하기 위해 = 인쇄하기 위해.."\""..끈으로 묶는(v).."\",\r\n" 끝. 끝. 인쇄하기 위해 = 인쇄하기 위해..string.rep(" ", 들여쓰기-2).."}" 돌아가다 인쇄하기 위해 끝. --덤 탭 기능. 넝쿨 (술병) 현지의 끝 문자열 = '' 한다면 술병 == 영의 그리고나서 끝 문자열 = '''비공식''' 그렇지 않으면 유형(술병) == '탁자' 그리고나서 한다면 #술병 > 0 그리고나서 p.s = p.s..'\r\n' 끝. 한다면 p.탭.한 줄 그리고나서 현지의 와드스 = '{ ' 위해서 k,v 에 쌍들(술병) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 (p.탭.모든 지수 == 진실의) 또는 (유형(k) ~= '숫자') 그리고나서 와드스 = 와드스..'['..k..']='..넝쿨(v)..', ' 또 다른 와드스 = 와드스..넝쿨(v)..', ' 끝. 끝. 끝 문자열 = 와드스 .. '} ' 또 다른 끝 문자열 = 덤프 탭 (술병) 끝. 그렇지 않으면 유형(술병) == '숫자' 그리고나서 끝 문자열 = NumToStr (술병) 그렇지 않으면 유형(술병) == '''비공식''' 그리고나서 한다면 술병 == 진실의 그리고나서 끝 문자열 = '참' 또 다른 끝 문자열 = '거짓' 끝. 그렇지 않으면 유형(술병) == '함수' 그리고나서 끝 문자열 = '함수' 또 다른 술병 = 문자로 (끈으로 묶는(술병)) 한다면 p.nohtml 그리고나서 술병 = string.gsub (술병, "<", "⪡") 술병 = string.gsub (술병, ">", "⪢") 끝. 끝 문자열 = '"'..술병..'"' 끝. 돌아가다 끝 문자열 끝. --var 기능. p.w (어디에) 한다면 p.가능한 그리고나서 돌아가다 이름 확인 (어디에, 'w') 끝. 끝. --w 현지의 기능. 말괄량 (술병) iiTab1Line = p.탭.한 줄 한다면 p.탭.한 줄 그리고. (유형(술병) == '탁자') 그리고나서 p.탭.한 줄 = 것은 아니다. p.표 포함(술병) 끝. 현지의 ss = 넝쿨(술병) p.탭.한 줄 = iiTab1Line 돌아가다 ss 끝. --varx 기능. p.v (...) 한다면 p.가능한 그리고나서 현지의 스트르 = '' 한다면 #아그 == 0 그리고나서 스트르 = '''비공식''' 또 다른 현지의 c = 0 위해서 k, i 에 짝을 짓다(아그) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 c = k 끝. --오류 (c) 위해서 i = 1, #아그 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 스트르 ~= '' 그리고나서 스트르 = 스트르..벳프 끝. 스트르 = 스트르..말괄량(아그[i]) 끝. 끝. 돌아가다 스트르 끝. 끝. --v 기능. p.wv (어디에, ...) 한다면 p.가능한 그리고나서 돌아가다 이름 확인(어디에,'w')..화살()..p.v(짐을 풀다(아그)) 끝. 끝. --wv 기능. p.nv (...) 한다면 p.가능한 그리고나서 한다면 수학.모드(#아그,2) ~= 0 그리고나서 끝 문자열 = '모든 매개 변수에 이름 또는 변수가 없습니다.' 또 다른 현지의 s = '' 현지의 IsName = 진실의 기능. 콩캣(와드스) 한다면 s ~= '' 그리고나서 한다면 IsName 그리고나서 s = s..벳프 또 다른 s = s..': ' 끝. 끝. s = s..와드스 끝. 위해서 i = 1, #아그 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 IsName 그리고나서 콩캣 (이름 확인(아그[i],'''n''')) IsName = 거짓의 또 다른 콩캣 (말괄량(아그[i])) IsName = 진실의 끝. 끝. 끝 문자열 = s 끝. 돌아가다 끝 문자열 끝. 끝. --비공식적인 기능. p.wnv (어디에, ...) 한다면 p.가능한 그리고나서 돌아가다 이름 확인(어디에,'w')..화살()..p.nv (짐을 풀다(아그)) 끝. 끝. ---------- 현지의 기능. EnableAndBl () 한다면 p.가능한 그리고나서 한다면 린 수 < p.최고선.번호 그리고나서 p.브레이크라인 () 돌아가다 진실의 또 다른 p.s = p.s..메스 레이즈드(p.최고선.번호) 오류 (p.s) 돌아가다 거짓의 끝. 또 다른 돌아가다 거짓의 끝. 끝. ­ 에나브 앤 블 기능. p.위토스 (어디에) 한다면 EnableAndBl () 그리고나서 p.s = p.s..p.w (어디에) 끝. 끝. "nos" 기능. p.vtos (...) 한다면 EnableAndBl () 그리고나서 현지의 end_message_count = 아그["n"] - #아그 p.s = p.s..p.v (짐을 풀다(아그)) 한다면 #아그 == 0 그리고나서 end_message_count = end_message_count-1 끝. 위해서 i = 1, end_message_count 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 p.s = p.s..벳프..'''비공식''' 끝. 끝. 끝. --vtos 기능. p.wvtos (어디에, ...) 한다면 EnableAndBl () 그리고나서 p.s = p.s..p.wv (어디에,짐을 풀다(아그)) 끝. 끝. --wvtos 기능. p.nvtos (...) 한다면 EnableAndBl () 그리고나서 현지의 end_message_count = 아그["n"] - #아그 한다면 end_message_count > 0 그리고나서 위해서 i = 1, 아그["n"] 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 수학.모드(i,2) ~= 0 그리고나서 p.s = p.s..아그[i]..': ' 또 다른 p.s = p.s..p.v(아그[i]) 한다면 i < 아그["n"] 그리고나서 p.s = p.s..벳프 끝. 끝. 끝. 또 다른 p.s = p.s..p.nv (짐을 풀다(아그)) 끝. 끝. 끝. "nabetos" 기능. p.wnvtos (어디에, ...) 한다면 EnableAndBl () 그리고나서 현지의 end_message_count = 아그["n"] - #아그 한다면 end_message_count > 0 그리고나서 p.s = p.s..어디에..화살() 위해서 i = 1, 아그["n"] 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 수학.모드(i,2) ~= 0 그리고나서 p.s = p.s..아그[i]..': ' 또 다른 p.s = p.s..p.v(아그[i]) 한다면 i < 아그["n"] 그리고나서 p.s = p.s..벳프 끝. 끝. 끝. 또 다른 p.s = p.s..p.wnv (어디에, 짐을 풀다(아그)) 끝. 끝. 끝. --wnvtos 돌아가다 p