• 火狐浏览器调试eval源码


    火狐浏览器调试eval源码

    firefox浏览器在网页调试上,有一个没法和chrome一比高下的功能,就是eval脚本的调试,有时前端架构使用了基于eval的方式,有时候可能是自己一个多行函数,每每遇到这种场景,firefox就没得调,定位不了行,也打不了断点,就必须拿出chrome进行调试一番。

    那到底firefox有没有这个功能呢?

    调试eval源码

    搜索developer.mozilla.org还真没找到了

    https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Debug_eval_sources

    var script = `function foo() {
                   console.log('called foo');
                 }
                 //# sourceURL=my-foo.js`;
    
    eval(script);
    
    var button = document.getElementById("foo");
    button.addEventListener("click", foo, false);
    

    这是网站提供的一个例子,放到控制台里执行一下,就会创建函数foo,但是没有办法跳到源代码页面,要执行这个函数foo(),再通过console.log那句打印的地址进到源码。

    image-20200726082121288

    如果两个函数一起呢

    function foo() {
        console.log('called foo');
    }
    //# sourceURL=my-foo.js
    
    
    
    function foo375() {
        console.log('called foo375');
    }
    //# sourceURL= VM375.js
    

    console执行看看效果

    image-20200726083313615

    两个函数都被关联到了my-foo.js,而foo375并没有关联到VM375.js,但是点击过去,还是能定位到源代码位置的,看来一个eval只需要一个对应的sourceURL就可以了。

    image-20200726083911685

    假如有许多的eval脚本,则名称最好能区分开来,简单点的就用VM加自增长数字的形式吧

    //# sourceURL= VM375.js
    var testBar="submit";
    function foo375() {
        console.log('called foo375');
    }
    
    

    image-20200726085047171

    就是这样,竟然按道理应该是VM375.js,可是没有。

    最后经过多次测试比较发现sourceURL等号之后不能有空格的。

    image-20200726090306036

    .js,看上去就有了chrome中的效果。

    重写eval处理sourceURL

    关于sourceURL的处理,有时并不想写到源代码文件中,有时根本改不了源代码,比如线上环境。比较好的方式就是重写eval函数,通过script方式或者浏览器扩展content_script的方式。

    // 重写eval函数自动处理sourceURL
    var origin_eval=eval
    var vmNumber=0;
    eval=function(text){
        var vmStr=`//# sourceURL=VM${vmNumber++}.js`
        text=`${vmStr}\n${text}`;
        origin_eval(text)
    }
    
    // 使用
    var script = `function foo() {
        console.log('called foo');
      }
     `
    eval(script);
    

    image-20200726102741477

    源代码定位

    方式一:代码中添加打印信息

    这种方式不仅要写console.log,还要先触发执行函数,才能跳转到源码打断点,也就是说调试这个函数的时候,它已经是第二次执行了。

    方式二:从Sources下查找源代码

    image-20200726104540519

    这种方式还是比较容易的,但是也有问题就是,文件多时候通过vm编号,这种命名方式就不太好了,名称最好和函数名称对的上。

    方式三:通过函数名跳转

    查了许多资料,目前还是没有办法根据函数名称跳转的源代码的方法。

  • 相关阅读:
    PostgreSQL数据库中的常见错误
    postgresql相关命令
    Linux系统查看公网IP地址
    TCP/IP TIME_WAIT状态原理
    TCP连接状态详解及TIME_WAIT过多的解决方法
    让你提升命令行效率的 Bash 快捷键 [完整版]
    linux 如何显示一个文件的某几行(中间几行)
    linux中内核的一个不错的参数somaxconn
    Linux crontab 实现每秒执行
    Linux tar This does not look like a tar archive
  • 原文地址:https://www.cnblogs.com/wxcde/p/13380327.html
Copyright © 2020-2023  润新知