首页 > 其他分享 >修改vm代码减少vm坑点

修改vm代码减少vm坑点

时间:2023-12-21 20:35:06浏览次数:34  
标签:node 坑点 代码 global vm value js vm2

/** 
 * [email protected]
 * 安装: nodejs
 * 然后: npm install vm2       npm install canvas        npm install jsdom
 * 提示: 建议每一个编写完事的js 建议用fd的js调试工具压缩一下,减少占用行数
 * 
 * 使用vm2之前,先修改vm2本地文件
 * 
 *  1、修改vm.js里的
 *      // Create a new context for this vm.
 *      //原本下面这句话 const _context = createContext(undefined, {
 *      //被修改成了这句话 const _context = createContext(options, {
 *      //外界在new VM的时候 把全局变量通过对象形式传递过来,全局的context就会继承这个全局变量!
 * 
 * 
 *  2、修改contextify.js里的 搜索Contextify.setGlobal =
 *      (1)、global[prop] = value;//Contextify.value(value); //这里是为了在调试代码里不显示proxy 已被代理
 *      (2)、去掉vm2特征global
 *      //下面这段屏蔽了
 *      Object.defineProperties(global, {
 *          global: {value: global},
 *          GLOBAL: {value: global},
 *          root: {value: global},
 *          isVM: {value: true}
 *      });
 * 
 * 
 *  3、修改main.js里的
 *      //如果想让vm2报错不是内部错误,修改890行
 *      throw e;//this._internal.Decontextify.value(e);  //原本是这句话throw this._internal.Decontextify.value(e);    改成了 throw e
 * 
 * 关于vm2报错本地文件,但是找不到那个报错的调试文件解决方法:
 *      const {VM,VMScript} = require("vm2");//这个是修改过的
 *      const CodeGenerate = require("./node_tools/CodeGenerate.js");
 *      //内存的概念,并非真正的内存,只是变量存储。
 *      let Vm2Cfg = {memory:{prototypes:{},examples:{}},DefPrototype(prototypeName,constructor,basePrototype){}};
 *      let savepath = `${__dirname}/vm_testScript/VM2_debug.js`;    //提前把文件路径保存到变量里。
 *      let code = CodeGenerate(path_,savepath);                     //把加载完事的文件code直接写到本地
 *      let vm = new VM();
 *      let catvm = Object.assign(Vm2Cfg,{vm:this});//内存配置导入
 *      vm.setGlobal("catvm",catvm);//导入到全局里,这里的名字随便改,整体形成代码形式的话。就不要随意修改了。
 *      vm.run(new VMScript(code,savepath)); //运行前 savepath 要保存到本地,那么调试报错时才能找到位置。
 * 
 * 
 * VScode 环境联调配置nodejs执行配置文件内容 launch.json
 *   //运行js时添加nodejs配置文件 launch.json ,测试代码路径如下:
 *   //C:\Users\AdministratorLr\Desktop\NewCode3_2022_10_15\.vscode\launch.json
 *   //配置文件内容入下:
 * 
 *{
 *    "version": "0.2.0",
 *    "configurations": [
 *        {
 *            "name": "v1 本地调试",
 *            "type": "node",
 *            "request": "launch",
 *            "program": "${workspaceFolder}/index.js", //它只是跟在可执行文件后面的 一个参数了,要调试的js代码,不管你想执行哪个配置文件,这里配置即可
 *            "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径,不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
 *        },
 *        {
 *            "name": "v2 浏览器无环境联调",
 *            "type": "node",
 *            "request": "launch",
 *            "program": "--inspect-brk", //它只是跟在可执行文件后面的 一个参数了
 *            "args": ["${workspaceFolder}/index.js"],//它只是跟在可执行文件后面的 一个参数了
 *            "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径,不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
 *        },
 *        {
 *            "name": "v3 cmd参数详解",  //演示所有参数的含义 , 控制台执行的结果是: D:\nodejs\node.exe args1 args2 args3 args4 args5  所以根据想要的功能自行设定和删减
 *            "type": "node",
 *            "request": "launch",
 *            "program": "args3", //它只是跟在可执行文件后面的 一个参数了
 *            "args": ["args4", "args5"],//它只是跟在可执行文件后面的 一个参数了
 *            "runtimeArgs": ["args1", "args2"],//它只是跟在可执行文件后面的 一个参数了
 *            "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径,不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
 *        }
 *    ]
 *}
 *
**/ 

  

 

标签:node,坑点,代码,global,vm,value,js,vm2
From: https://www.cnblogs.com/yoyo1216/p/17920049.html

相关文章

  • 《代码大全》读后感一
    《代码大全》是一本非常详尽和深入的著作,它涵盖了软件开发的各个方面,并提供了许多有关代码编写和软件设计的实用技巧和指导。以下是对书中内容的进一步分析:代码质量:书中强调了代码质量的重要性。作者指出,高质量的代码应该具备可读性、可维护性和可测试性。他提供了许多方法和技......
  • windows server 2008 安装vmtool就重启
    ​ 找了很多方法应该只能换源这个方法最靠谱了WindowsServer2008安装流程和VMwareTools安装问题_本程序需要您将此虚拟机安装的更新到sp2_小天要回去的博客-CSDN博客链接在这里目前网络渗透准备从0开始学我推荐开这个视频【CRACER全网最新渗透课程(已获得授权)】DAY01......
  • 零代码敲敲云与钉钉的完美集成,打造智能办公新生态
    为满足企业对于高效沟通、协作和工作流程管理日益增长的需求,许多企业都在寻找能够与他们现有的工作平台无缝集成的工具。钉钉作为一款广受欢迎的企业通讯和协同工具,已经成为了众多企业的首选。目前敲敲云已于钉钉完美集成,通过这次集成,用户可以在钉钉中直接使用敲敲云的零代码功能......
  • 【2023CANN训练营第二季】——Ascend C代码实操分享
    1.实操题目:使用AscendC实现Addcdiv算子参考pytorch的Addcdiv算子,实现AscendC算子Addcdiv,算子命名为AddcdivCustom相关算法:out=x+y/z*value要求:1、完成Kernel侧实现代码和host侧调用算子代码,支持fp16类型输入2、完成AcInn方式调用编写好的算子3、根据提供的测试用例,使用......
  • java中对于jvm虚拟机进程的操作类
    在java中,Runtime类表示运行时操作类,是一个封装了JVM进程的类,每一个JVM都对应着一个Runtime类的实例,此实例由JVM运行时为其实例化。下面图示演示了其方法以及应用。......
  • 国产DeepSeek Coder 33B开源:创新代码AI,性能优于CodeLlama
    引言近日,国产AI领域迎来了一项重大突破:DeepSeek团队正式发布了DeepSeekCoder33B模型,这一基于最新人工智能技术的代码生成模型不仅完全开源,而且在多项评测中显示出优于同类产品CodeLlama的卓越性能。Huggingface模型下载:https://huggingface.co/deepseek-aiAI快站模型免费加速下......
  • 将本地代码添加到gitee
    新建仓库,将代码加入gitee根据提示创建仓库填写完成后创建readme文件,目的为了初始化分支。现在按照下面命令操作#进入本地项目文件夹cdxxxgitinitgitremoteaddoriginhttps://gitee.com/zcjlq/test1.gitgitpullgitaddxxxgitcommit-m"xxx"gitpush已有gitee仓库,将......
  • JVM实战-G1参数调优
    G1简介G1GC,全称Garbage-FirstGarbageCollector,在JDK1.7中引入了G1GC,从JAVA9开始,G1GC是默认的GC算法。通过-XX:+UseG1GC参数来启用。G1收集器有分区概念,是工作在堆内不同分区上的收集器。G1的分区既可以是年轻代也可以是老年代,同一个代的分区不需要连续。G1收集器在运行过......
  • JVM内存参数的学习之三
    JVM内存参数的学习之三背景研究启动性能时,顺便看到了jmap-heap1的部分信息看到:MinHeapFreeRatio、MaxHeapFreeRatio自己突然以为是Percentage的参数,恍惚了好久.才发现自己对内存的学习不够,所以想多学习一下.参数解释MinHeapFreeRatio:空闲堆空间的最小......
  • 解决GNU Radio的内嵌代码块无法打开代码编辑器
    摘要解决GNURadio的内嵌代码块无法打开编辑器的问题.通过修改py脚本实现使用VSCode编辑内嵌代码.问题描述环境:系统macOS13.5GNURadioCompanion3.10.8.0(Python3.10.13)代码块选择应用程序是空的选择应用程序是空的实现修改/Users/workspace/rad......