专栏首页云霄雨霁追踪分析解决办法

追踪分析解决办法

将追踪划分为序列

//思路:每个函数块的追踪在一个数组里,将每个函数追踪转化成序列。
//如果追踪中有ASYNC标记,则创建一个包含两个序列的新序列。
function TswitchS(arr){
    if(typeof arr === "Array"){
        Sequence = new Array();
        var FUNC="root";
        var j=0,k=0;//序列下标参数
        var SKIP=false;//FAILURE标记
        var asyncID = new Array();
        for(var i=0;i<arr.length;i++){
            var arg0_length = arr[i][0].IndexOf(':');//返回某个指定的字符串值在字符串中首次出现的位置。
            var func = arr[i][0].substring(0,arg0_length);//用于提取字符串中介于两个指定下标之间的字符
            var arg1_length = arr[i][0].lastIndexOf(':');
            var funAsync = arr[i][0].substr(arg_length);
            if(testA(funAsync)){//处理异步调用
                var num = funAsync.substr(funAsync.length-1);//用于提取字符串中介于两个指定下标之间的字符
                if(typeof asyncID[num]==="Array"){
                    asyncID[num].push();
                }else{
                    asyncID[num] = new Array();
                    asyncID[num].push();
                }
            }
            if(func==FAILURE){//有FAILURE标记,此序列终止
                SKIP=true;
                Sequence[j][k++]="FAILURE";
            }else if(func==FUNC&&!SKIP){//同一序列
                Sequence[j][k++]="该行序列格式";
            }else{//开启新序列
                j++;k=0;
                FUN=fun;
                SKIP=false;
                Sequence[j] = new Array();
                Sequence[j][k]="该行序列格式";
            }
        }
    }
}

//增则表达式匹配异步调用
function testA(text){  
    var result=text.indexOf("ASYNC");
     if(result!=-1){
        alert("ok");   
     }else{
      alert("err");  
     }                 
}

//获取异步调用ID号
function getID(str){
    if(typeof str ==="String"){
        var numColon = str.lastIndexOf(":");
        var strID = str.substr(numColon);
        return strID;
    }
}

查找包含直接DOM访问的序列

//根据ρ←(l1,l2,...,ln)⇐⇒∃li∈{l1,l2,...,ln},li .f ailure = true(1)找到目标序列。
function test(text){  
    //  var   re =/\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;
    var   re =new RegExp("FAILURE$");
    var result=  re.test(text);
     if(result){
        alert("ok");   
     }else{
      alert("err");  
     }                 
}
function Screen(arr){
    var last = arr[arr.length-1];//获取最后一个元素
    if(test(last)){//选中序列
        var seq_num = last.IndexOf(':');//返回某个指定的字符串值在字符串中首次出现的位置。
        var seq = last.substring(0,seq_num);//用于提取字符串中介于两个指定下标之间的字符
        return seq;
    }
}
var Seq=new Array();
Seq=Sequence.filter(Screen(this));

定位直接DOM访问

//在找到的序列中根据dynamic backword slicing寻找direct DOM access.
function findDOM(iid){
    if("是direct DOM access"){
        //该行(iid)标识为直接DOM访问
        return iid;
    }else{//不是direct DOM access,追踪变量保持null值
        if(iid.ASSIGN){//如果是赋值
            var stringIid=iid.code;
            text=text.replace(/\s/ig,'');//去除字符串中的空格
            if(iid.name==null_var){//是关于null_var的赋值
                var a = stringIid.IndexOf('=');//返回某个指定的字符串值在字符串中首次出现的位置。
                var b = stringIid.IndexOf(';');//返回某个指定的字符串值在字符串中首次出现的位置。
                var new_var = stringIid.substring(a,b);//用于提取字符串中介于两个指定下标之间的字符
                null_var=new_var;
                return findDOM(iid-1);
            }else{
                return findDOM(iid-1);
            }
        }else if(iid.RETURN){//如果是return
            if(){//是关于null_var的赋值
                return findDOM(iid-1);
            }else{
                return findDOM(iid-1);
            }
        }else if(iid.FUNCTION){//如果是函数调用
            if(){//是关于null_var的赋值
                return findDOM(iid-1);
            }else{
                return findDOM(iid-1);
            }
        }else{//非以上情况,忽略
            return findDOM(iid-1);
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Dijkstra双栈表达式求值算法

    SuperHeroes
  • Java虚拟机--类加载的时机

    SuperHeroes
  • 追踪收集解决方法

    SuperHeroes
  • javascript模式 读书笔记一

    模式是指一个通用问题的解决方案。 模式分三种 设计模式 编码模式:javascript特有的

    lilugirl
  • <sub>标签

    The coordinate of the ith point is (xi, yi). For example, the 10th point has co...

    Html5知典
  • 吴军《硅谷来信》思维导图笔记 - 工作篇

    2017年,在前公司领导技术经理刘总的推荐下,在得到App上订阅了吴军老师的《硅谷来信》,从此每天刷牙洗脸的时间就开始听吴军老师在大洋彼岸寄来的信件了。整个来信...

    Edison Zhou
  • JS判断当前设备是 PC IOS Andriod

    江湖前辈黄药师
  • 实用 | JavaScript 常用方法总结

    12.JS判断两个日期大小 适合 2012-09-09 与2012-9-9 两种格式的对比

    疯狂的技术宅
  • JavaScript 常用方法总结

    经常使用的 JS 方法,今天记下,以便以后查询 /* 手机类型判断 */ var BrowserInfo = { userAgent: navigator.us...

    前朝楚水
  • 文史上最骚的编程语言来了!大四学生发明言文编程语言!秀的我头皮发麻

    到底是什么神仙项目,竟然获得如此高的评价?原来,这是一位卡内基梅隆大学(CMU)的大四学生开发的基于文言文的编程语言。

    Guide哥

扫码关注云+社区

领取腾讯云代金券