zoukankan      html  css  js  c++  java
  • 浏览器无环境调试

    1. 安装

    /*
        注意: 如何安装不了,cmd窗口以管理员身份运行
        npm install node-inspect -g  // 浏览器无环境配置
        cd 某个目录,安装 npm install vm2 -g //获取纯净v8环境,-g 全局安装
    */

    2. 调试程序目录结构

     3. 添加配置

     

     

     4. 点击debugger--> 配置好的(浏览器无环境)进入debugger

     5. 打开任意浏览器(此处以google浏览器为例) 按 F12进入调试模式

     

    本地代码加载到了浏览器中,可以在浏览器中进行调试了。

    6.代码

    index.js

    var fs =require('fs');
    /*
        注意: 如何安装不了,cmd窗口以管理员身份运行
        npm install node-inspect -g  // 浏览器无环境配置
        npm install vm2 -g 
    */
    const { VM,VMScript} = require('vm2');
    const vm =new VM();// V8创建
    file=`${__dirname}\\code.js`
    w_file=`${__dirname}\\window.js`
    var code =fs.readFileSync(w_file,"utf-8")+fs.readFileSync(file,"utf-8");
    var script = new VMScript(code,`${__dirname}\\正在调试.js`)
    debugger
    vm.run(script);
    debugger
    index.js

    code.js

    console.log("you!")
    debugger

    window.js

    window=this;
    // 重新定义对象的名字,此处给window对象重新定义名字
    Object.defineProperties(window,{
        [Symbol.toStringTag]:{
            value:"window",
            configurable:true
        }
    
    })
    // 封装
    function vmProxy(o) {
    
        return new Proxy(o,{
    
            set(obj,prop,value){
                // obj 哪个对象,prop哪个个对象的属性,该属性的值
                console.log("set=>",obj,prop,value)
                // 把原对象赋值回去
                return Reflect.set(...arguments)
            },
            get(obj,prop,recevier){
                console.log("get=>",obj,prop,recevier)
                return obj[prop];
            }
        
        });
    };
    
    // 主要用来保护伪造的函数,让其更难被识破
    
    
    
    /*
    Object.defineProperty(window,"zhiyuan",{
    
        set:function (val) {
            console.log("zhiyuan",val)
            
        },
        get:function () {
            return this.zhuyuan
        }
    
    }); 
    */
    
    window= vmProxy(window)
    // 后代理的检测不到先代理的
    window.zhiyuan="12345";
    window.aaa= window.zhiyuan;
    /*
     创建对象:
        1. {}
        2. function window(){};new window;
        3. Object.create({})
        4. class window()
    
    */
    navigator=class navigator{}
    navigator=vmProxy(navigator)
    document=class document{}
    document=vmProxy(document)
    location=class location{}
    
    // toString 方法会调用这个
    location.reload=function reload() {
        
    }
    location =vmProxy(location)
    window.js

    lauch.json

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
    
            {
                "name": "浏览器无环境",
                "program": "${workspaceFolder}\\src\\index.js",
                "request": "launch",
                "skipFiles": [
                    "<node_internals>/**"
                ],
                "runtimeExecutable": "node-inspect",
                "type": "pwa-node"
            },
        
    
            {
                "name": "Launch Program",
                "program": "${workspaceFolder}\\src\\index.js",
                "request": "launch",
                "skipFiles": [
                    "<node_internals>/**"
                ],
                "type": "pwa-node"
            },
           
        ]
    }
    lauch.json
  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/knighterrant/p/15704145.html
Copyright © 2011-2022 走看看