공유 템플릿 참조 오류 추적

저자:레위위안, 2020-01-28 20:39:09
태그:

사용 방법, 먼저 이 템플릿 클래스를 참조하십시오. 각 스크립트 파일에 $.fileLineMark ((main, 35) 를 추가합니다. 첫 번째 매개 변수: 파일 이름 두 번째 매개 변수: 이 코드 라인의 줄 번호는 파일에 있습니다. 그리고 오류를 추적하기 전에 코드 라인이 실행되도록 보장합니다. 마지막으로 정책 코드에 main = $.tryfunc ((main) 을 추가하여 모든 호출이 try를 통과하도록 보장합니다.

정책 오류가 발생하면 자동으로 어떤 문서의 어떤 줄에 있는지 표시하는 빨간 글자가 표시됩니다

원리: js 코드 로딩을 호스팅하는 방법은 클래스 라이브러리를 포함하는 모든 js 코드를 하나의 큰 파일로 통합하여 로딩하는 것입니다. 큰 파일의 각 파일의 위치를 찾아서, 마지막 오류가 발생했을 때 역으로 대응합니다.

img


var fileStartLine = []
$.fileLineMark = function(file, line) {
    try{a=a+1}catch(ex){
        var markline = parseInt(ex.stack.split('\n')[3].split('(__FILE__:')[1].split(')')[0])
        fileStartLine.push([file, markline-line])
        fileStartLine.sort(function(a, b){
            return b[1] - a[1]
        })
    }
}

$.tryfunc = function(func) {
    return function(a,b,c,d,e,f,g,h,i,j,k,l,m,n) {
        try {
            return func(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
        } catch(ex) {
            if (ex.message == "execution timeout") {
                Log("忽略机器人停止指令")
                throw ex
                return
            }

            var line = parseInt(ex.stack.split('\n')[2].split('(__FILE__:')[1].split(')')[0])
            for (var ii = 0; ii < fileStartLine.length; ii++) {
                if (line > fileStartLine[ii][1]) {
                    Log("catch error at " + fileStartLine[ii][0] + ":" + (line-fileStartLine[ii][1])+"#ff0000")
                    break
                }
            }

            throw ex
        }
    }
}

function onTick() {

}

function main() {
    $.fileLineMark("main", 41)
    onTick = $.tryfunc(onTick)
    
    while(true){
        onTick()
        Sleep(1000)
    }
}


더 많은

초목이건 재미있어요.

초목하지만 그 당시에는 생각하지 않았습니다.

레위위안하하, 여러분들이 내부에서 어떻게 하는지 역으로 생각해보세요.