Partagez les modèles de référence pour détecter les erreurs

Auteur:levé, Date: 2020-01-28 20:39:09
Les étiquettes:

Comment l'utiliser, c'est d'abord par cette bibliothèque de modèles Dans chaque fichier de script, ajoutez $.fileLineMark ((mainbar, 35) Le premier paramètre: le nom du fichier Le deuxième paramètre: le numéro de la ligne de code dans le fichier Il est également important de s'assurer que la ligne de code est exécutée avant que l'erreur ne soit détectée. Enfin, dans le code de stratégie, on ajoute main = $.tryfunc (main) pour s'assurer que tous les appels passent par try

Lorsqu'une erreur de stratégie est signalée, une ligne rouge indique automatiquement dans quelle ligne du fichier

Principe: la méthode de gestion du chargement de code jS consiste à charger tout le code jS, y compris les bibliothèques de classes, dans un fichier plus grand; trouver la position de chaque fichier dans le fichier plus grand, et le nombre de lignes de l'erreur spécifique.

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)
    }
}


Plus de

Le foinC'est intéressant, regardez.

Le foinJe ne pense pas qu'il soit possible de le faire, mais je n'y pensais pas à l'époque.

levéC'est un peu comme si vous aviez une idée de ce que vous faisiez à l'intérieur, pas tout à fait exacte, mais ça a aidé.