精华内容
下载资源
问答
  • 1.调试微信小程序时报错:Enable IDE Service (y/N) [27D[27C 解决方式:打开微信开发者工具>设置>通用设置>安全>打开服务器端口

    1.调试微信小程序时报错:Enable IDE Service (y/N) [27D[27C

    解决方式:打开微信开发者工具>设置>通用设置>安全>打开服务器端口

     

     

     

    展开全文
  • 原标题:在线/不重启/不暂停的对Java应用进行Debug,通过程序打断点并输出断点信息我 相 信 这 么 优秀 的 你已 经 置 顶了 我转自互联网金融小站(internet-sky)已获作者授权,拒绝二次转载平时我们进行程序开发时...

    原标题:在线/不重启/不暂停的对Java应用进行Debug,通过程序打断点并输出断点信息

    我 相 信 这 么 优秀 的 你

    已 经 置 顶了 我

    转自互联网金融小站(internet-sky)

    已获作者授权,拒绝二次转载

    平时我们进行程序开发时经常需要通过Debug的方式查看代码运行到某一行时的上下文变量信息,以便进行代码调式分析。但是在生产环境下,正在线上运行的程序如果发现有问题需要进行调式,如果手动SocketRemote连接并设置断点并跟踪断点信息,会造成程序阻塞,影响线上正在运行的业务。本文将通过Java JDI技术,介绍如何在程序正常运行的情况下,通过Java代码在不阻塞程序正常运行的情况下获取某一个代码行执行时的上下文变量信息,可以动态打断点并输出断点信息。

    在介绍JDI之前,首先看一下传统的Socket Remote Debug

    使用IDE进行Debug,可以使用IDE中内嵌的Tomcat进行调式,或使用Socket Remote方式调式,例如在Intellij IDEA中可以参照如下方式为程序设置远程调式端口:

    aebb6471750ce2f7d7e15e5d15f802b4.png

    启动上面的程序。之后设置进行debug的代码,如下设置要debug远程的地址和端口:

    8fb3433ae3933f82282affaf02b4d58f.png

    配置好后,按照如下方法启动debug即可:

    1b508666a1902066d9d9bf63dc721245.png

    什么时JDI

    JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java调试线协议(JDWP),以及 Java 调试接口(JDI)。JDI(Java Debug Interface)是 JPDA三层模块中最高层的接口,定义了调试器(Debugger)所需要的一些调试接口。基于这些接口,调试器可以及时地了解目标虚拟机的状态,例如查看目标虚拟机上有哪些类和实例等。另外,调试者还可以控制目标虚拟机的执行,例如挂起和恢复目标虚拟机上的线程,设置断点等。

    使用JDI编写代码进行远程调式

    1. 被调式程序设置调式端口

    被调式程序启动时添加允许远程调式的启动参数:

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

    2. 引用类库

    每个Java JDK都有自己的JDI接口实现,标准的Oracle JDK的JDI接口放在jdk/lib/tools.jar中,因此写代码时首先需要引入这个jar。

    3. 连接远程JVM

    3bf1482b5ad81036e7bd5d2aee6b4a33.png

    4. 标记断点

    如下代码,需指定要标记断点的类和行数。注意一个类或者行可能会有多个线程来调用,但是示例代码中为了简单考虑只获取了第一个调用线程的结果,即get(0)。此外,给行打断点时,所设置的行数必须是有效代码的行。例如如果所设置的行是回车没有Java代码,则会抛出异常。

    1757f76fc16ff87f7d6468f72a448456.png

    如上注册了一个Breakpoint类型的事件请求,而系统除了提供断点事件外还提供了很多其他的事件类型:

    7c3d0139f7b8455e175c4e20693bd53f.png

    不同的事件需要被分类地添加到不同的事件集合(EventSet)中,事件集是事件发送的最小单位。事件集一旦创建出来,便不可再被修改。生成的事件将被依次地加入到目标虚拟机的事件队列(EventQueue)中。然后,EventQueue将这些事件集以“先进先出”策略依次地发送到调试器端。EventQueue 负责管理来自目标虚拟机的事件,一个被调试的目标虚拟机上有且仅有一个EventQueue实例。特别地,随着一次事件集的发送,目标虚拟机上可能会有一部分的线程因此而被挂起。如果一直不恢复这些线程,有可能会导致目标虚拟机挂机。因此,在处理好一个事件集中的事件后,建议调用事件集的resume() 方法,恢复所有可能被挂起的线程。

    5. 跟踪断点

    如下代码,获取事件时需要根据事件类型进行相应的处理:

    bcab1f0b387b41a20b5c5c819b4842f0.png

    6. 获取断点信息

    如下代码:

    f55982c8eb19b44f6274a07c6c331f4e.png

    174ddfd734318dbbd0141e4c4ed42011.png

    调用 BreakpointEvent 的 thread() 可以获取产生事件的线程镜像(ThreadReference),调用ThreadReference 的 frame(int) 可获得当前代码行所在的堆栈(StackFrame),调用 StackFrame 的visibleVariables() 可获取当前堆栈中的所有本地变(LocaleVariable)。通过调用 BreakpointEvent 的location() 可获得断点所在的代码行号(Location),调用 Location 的 method()可获得当前代码行所归属的方法。通过以上调用,调试器便可获得了目标虚拟机上线程、对象、变量等镜像信息。

    7. 解析获取的变量

    bc9c9e0bb08d3af7ca1dcfb6ea156522.png

    Value 和 Type 接口分别代表着目标虚拟机中对象、实例变量和方法变量的值和类型。通过 Value 接口的 type(),可以获取该值对应的类型。JDI中定义了两种基本的数据类型:原始类型(PrimitiveType)和引用类(ReferenceType)。与其对应的数值类型分别是原始值(PrimtiveValue)和对象引用(ObjectReference),Value和 Type 的具体对应关系如下:

    2ed56c40b7ade0bc41464d29be023b17.png

    8. 测试:启动目标程序

    测试目标类如下,计划在System.out.println行打断点,为了演示方便通过Thread.sleep添加暂停事件,以便启动调式程序:

    3de191e663f386aefc4adec4203b1d81.png

    启动时添加远程debug参数并运行。

    9. 测试:执行debug程序

    代码如下:

    70470be5c21a70a6172a4e80922bdad1.png

    输出结果如下:

    a7beff60f8ddbc334f28806c203ece7f.png

    —————END—————

    看完本文有意思?请分享给更多人返回搜狐,查看更多

    责任编辑:

    展开全文
  • 在wxs中打印,字符串化并在前面添加变量类型,同时添加时间戳避免因重复而被过滤,使输出更佳清晰直观。 function wxsLog() { var j = arguments.length var line = "--------------------" ...

    在wxs中打印字符串化并在前面添加变量类型,同时添加时间戳避免因重复而被过滤,使输出更佳清晰直观。

    function wxsLog() {
           var j = arguments.length
           var line = "--------------------"
           var arr = ["", line + line]
           for (var i = 0; i < j; i++) {
                  var item = arguments[i]
                  arr.push("👇" + item.constructor + "👇" + line, JSON.stringify(item))
           }
           arr.push(line + line, "🕔" + getDate().getTime() + "🕔", line + line)
           var str = arr.join("\n")
           console.log(str)
    }

    使用:

    wxsLog(a,b,c,...)

    效果: 

     在js中打印,由于涉及多指操作无法在开发者工具上模拟,真机调试目前又控制台不会输出来自wxs的信息,唯一方法就是callMethod,如下:

    wxs中:

    function jsLog() {
           var arr = [],len=arguments.length
           for (var i = 1; i <len ; i++) {
                  arr.push(arguments[i])
           }
           arguments[0].callMethod("logWxsData", arr)
    }

    arguments[0]必须为e.instanceownerInstance

     js中:

    logWxsData(arr){
       console.log(...arr)
    }

    展开全文
  • 小程序 输入停止后2秒执行,2秒内则打断执行。 var timers=null; formClassCode:function(e){ letthat=this; if(timers!=null) { clearInterval(timers); } timers=setTimeout(()=>{ //that....

     

    小程序 输入停止后2秒执行,2秒内则打断执行。

    var timers=null;
    formClassCode: function (e) {
    
        let that = this;
    
        if(timers!=null)
    
        {
    
          clearInterval(timers);
    
        }
    
        timers=setTimeout(() => {
    
         // that.getClassInfo();
    
         console.log('输出');
    
        }, 2000);
    
      },
    展开全文
  • 小程序发布了新的版本后,用户如果之前访问过该小程序,通过已打开的小程序进入(未动手删除),则会发现小程序中修改后提交的内容并没有生效,这是什么原因造成的呢? 二、分析问题: 我们微信小程序开发工具本地...
  • 找到需要打断点的位置,点击行数旁边的空白部分 点击后会有一个红点 步骤3: 在红点上鼠标右击,选择【同步断点到内置浏览器】就可以愉快地开始调试啦! 顺带说一句,CSDN是瞧不起Hbuilder么,文章标签都没有...
  • 微信小程序有个 web-view 组件,有了它,微信就相当于变成了个浏览器了,让小程序有了无限的可能,简直就是前端同学的福音。当然,它也有一定的限制,比如:只能打开 HTTPS 链接的页面只能打开已认证的「业务域名」...
  • 什么是事件 事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理... 更多微信小程序开发教程,可以关注hi小程序
  • 2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID 2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与<button open-type="getUserInfo"/>...
  • 微信小程序官方在四月中旬对小程序登录、用户信息相关接口进行了调整,导致大部分小程序的登录功能都受到了很多影响,当时调整的时候就打算写个教程的,但是一直没有时间去写这个,最近typecho小...
  • 按照小程序提供的事件 类型 触发条件 touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 touchend 手指触摸动作结束 tap 手指触摸后马上...
  • 触控事件笔记 touchstart 手指触摸 ...touchcancel 手指触摸动作被打断,如弹窗和来电提醒 touchend 手指触摸动作结束 tap 手指触摸后离开 longtap 手指触摸后后,超过350ms离开 ...
  • 打断点debugger

    2021-04-23 11:54:48
    可以让程序终端在需要的地方,从而方便开发人员进行分析,也可以在一次调试中设置断点,下一次只需要让程序自动运行到设置断点的位置,便可以在上次设置断点的位置中断下来,极大的方便了操作,从而节省了时间。...
  • 微信小程序

    2021-11-01 20:58:49
    微信小程序入门 什么是微信小程序小程序可以视为只能用微信打开和浏览的网站,小程序页面本质上就是网页 微信小程序的缺点 项目体积不能超过20MB 微信小程序的优势 微信 App 的功能(比如拍照、扫描、支付等等)...
  • 有的公司要求使用原生微信小程序开发,那么今天就来总结一下原生小程序的开发知识。 一、设计指南 微信小程序设计指南 – 官方说明 首先是小程序的整体设计风格和交互思路。 这是开发一款小程序说需要了解的第一步...
  • 微信小程序学习

    2020-12-28 22:39:34
    跳转,重定向,跳转至底部导航 <!--pages/home/home.wxml--> <view class="btn-area"> ... 沙场大练兵 表单登录注册微信小程序 作者一直在更新中,感谢支持!!
  • bindfocus 输入框失焦:bindblur value改变事件:bindchange --------------------- 触摸事件: 触摸动作开始:bindtouchstart 触摸动作结束:bindtouchend 触摸过程移动:bindtouchmove 触摸动作被打断:...
  • 微信小程序 项目结构 项目结构 上图为微信小程序的项目结构,pages下面包含了小程序中的每一个页面,每一个页面由页面结构,页面样式,页面配置和逻辑代码四部分组成。 页面结构 页面结构文件为index.wxml,...
  • 微信小程序之生成图片保存到相册 需求概要 电商项目中需要将自己小店的商品带上自己的小程序码生成海报,保存到本地,然后分享到万能的朋友圈,QQ空间,微博等等来广而告之… 如下图,三种海报格式轮播展示,左滑...
  • 前面的所有示例,小程序的页面都是写死的,也就是页面内容不会变。但是,页面数据其实可以通过脚本传入,通过脚本改变页面,实现动态效果。 小程序提供了一种特别的方法,让页面可以更方便地使用脚本数据,叫做...
  • } this.drawCanvas() }, /** *触摸事件被打断 */ touchcancel: function (e) { //根据需求是否复位拖条 // if (this.data.isStart) { // this.data.isStart = false; // this.data.progress = that.data.start...
  • bind(冒泡阶段)和catch(捕获阶段)都能绑定事件 .wxss 代替css 新单位:rpx 规定屏幕为750rpx 当前支持的选择器: .class #id element element, element ::after ::before 小程序的启动 客户端下载小程序到本地 app.js...
  • 小程序所有新进用户的昵称全部变成了“微信昵称”,当时我就 吓得我赶紧爬起来翻文档(需要代码直接往后翻) wx.getUserProfile(Object object) 基础库 2.10.4 开始支持,低版本需做兼容处理。 获取用户信息。每次...
  • 微信小程序wx.getUserProfile

    千次阅读 2021-03-09 10:56:25
    很多开发者在打开小程序时就通过组件方式唤起 getUserInfo 弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。详情可以点击官方调整链接微信官方...
  • 小程序事件分为冒泡事件和非冒泡事件: 冒泡事件: 当一个组件上的事件被触发后,该事件会向父节点传递。 非冒泡事件: 当一个组件上的事件被触发后,该事件不会向父节点传递。 WXML的冒泡事件列表: touchstart ...
  • 原标题:4个小规则,教你把微信小程序设计得更好看在各种各样小程序都纷纷开始抢占流量的今天,如何让自己的小程序给访客留下深刻印象,让访客感到舒适,是商家需要认真考虑的问题。要想做到这些,你就需要重视自己...
  • WXML:微信小程序版HTML

    2021-06-13 06:10:59
    在 WEB开发中,需要借助JavaScript并通过DOM接口来实现界面的动态更新,而在小程序中,则是使用WXML语言提供的数据绑定功能来实现的。 简单数据绑定 data: { id:1, message: 'Hello MINA!', number:1234, condition:...
  • 》》》什么是事件 事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。... touchcancel 手指触摸动作被打断,如弹窗和来电提醒 touchend 手指触摸动作结束

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,745
精华内容 23,498
关键字:

小程序怎么打断点