Luci 디버그 및 분석 방법
3097 단어 openwrt
처음에 luci 코드는 확실히 역방향과 다를 것이 없기 때문에 작가가 각 변수에 대한 용도를 추측해야 한다. 그래서 나는 모든 변수를 인쇄하는 방법을 생각했다.
이를 위해/usr/lib/lua/luci 디렉터리에log를 도입했습니다.lua 모듈:
local M = {}
local tconcat = table.concat
local tinsert = table.insert
local srep = string.rep
local function local_print(str)
local dbg = io.open("/tmp/luci.output", "a+")
local str = str or ""
if dbg then
dbg:write(str..'
')
dbg:close()
end
end
function M.print(...)
local dbg = io.open("/tmp/luci.output", "a+")
if dbg then
dbg:write(os.date("[%H:%M:%S]: "))
for _, o in ipairs({...}) do
dbg:write(tostring(o)..' ')
end
dbg:write("
")
dbg:close()
end
end
function M.print_r(data, depth)
local depth = depth or 3
local cstring = "";
local top_flag = true
local function table_len(t)
local i = 0
for k, v in pairs(t) do
i = i + 1
end
return i
end
local function tableprint(data,cstring, local_depth)
if data == nil then
local_print("core.print data is nil");
end
local cs = cstring .. " ";
if top_flag then
local_print(cstring .."{");
top_flag = false
end
if(type(data)=="table") then
for k, v in pairs(data) do
if type(v) ~= "table" then
if type(v) == "string" then
local_print(cs..tostring(k).." = ".."'"..tostring(v).."'");
else
local_print(cs..tostring(k).." = "..tostring(v));
end
elseif table_len(v) == 0 then
local_print(cs..tostring(k).." = ".."{}")
elseif local_depth < depth then
local_print(cs..tostring(k).." = {");
tableprint(v,cs,local_depth+1);
else
local_print(cs..tostring(k).." = ".."{*}")
end
end
else
local_print(cs..tostring(data));
end
local_print(cstring .."}");
end
tableprint(data,cstring,0);
end
return M
luci 디렉터리 아래 어느 곳에서든 호출할 수 있습니다
local log = require "luci.log"
log.print("Hello World")
log.print_r({"Hello", "World"})
또한log 모듈은/tmp/luci.ouput 아래에서tail 명령으로 추적할 수 있습니다.
# tail -f /tmp/luci.output
그래서 이 작은 모듈을 통해 오픈워터의 유명한 프로그램을 엿볼 수 있었다.정말 재미있어요. 시간이 있으면 루시 프레임워크 분석을 상세하게 적어 놓을게요.
또한luci 프로그램은 자체적으로 debug 모듈을 가지고 있습니다. 이것은 메모리의 점용 상황을 분석하는 모듈입니다. 디스패치에서도 사용할 수 있습니다.lua 모듈에서 열립니다.그것의 정보는/tmp/memtrace에 기록되어 있습니다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
OpenWrt로 NAT64/DNS64 환경 구축2021/05/26 추가: OpenWrt의 현재 stable release (19.07)의 Jool 패키지는 버전 3.5.7이지만 다음 OpenWrt 21.02에서는 4.1.5로 업데이트되는 것 같습니다. Jool ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.