阿里P10 关涛(观滔)邀你探讨新一代数据平台的架构迭代方向,戳此了解。 了解详情
写点什么

再见,本地环境!腾讯云全球首发:Serverless 在线远程调试

2021 年 4 月 09 日

再见,本地环境!腾讯云全球首发:Serverless 在线远程调试

在线调试是云函数为了解决用户在本地搭建调试环境复杂,云上环境不便于定位等问题推出的功能。

云上的各种服务,在本地无法完全模拟,程序员大都遇到过本地和远程环境运行结果不一致的情形,追查起来费时费力,不仅效率低下,也造成非常郁闷的工作体验。


所以,能否直接在远程环境中完成全部的开发流程,是提升开发体验的最直接手段,然而在其他问题都解决后,远程调试功能是最后的一公里。


本篇文章将以一段内存泄漏的代码为例,给大家展示如何使用云函数在线调试功能定位和解决问题。Node10 及以上版本的 runtime,使用 Chrome 浏览器打开云函数控制台,在函数代码页即可看到在线调试的入口。


开启调试模式


使用 Chrome 浏览器打开函数代码编辑页,可以看到在【远程调试】页。为保障调试的体验,开启调试模式将修改函数的部分配置,包括函数进入单实例模式、函数超时时间修改为 900 秒等。开启前请务必确认这些调整。



待加载完成后,页面将自动展示入口文件。


找不到需要的文件?


使用快捷键 Cmd + P(Mac)或 Ctrl + P(Windows)可以打开所需要的文件。但大家可能会发现,刚开启调试模式时,打开文件的列表中找不到所需要的文件。这是因为对于动态脚本语言来说,调试器不会加载所有的内容,只会加载执行过的文件。我们先点击测试,让函数运行一次。在运行一次后,我们就可以打开所需要的文件了。



设置断点


在代码前点击即可设置断点,在右上角的工具中可以进行继续执行、跨步执行、单步执行等操作,也可以灵活地启动或禁用断点。



内存泄漏排查 - 内存快照


这部分介绍如何使用内存快照功能排查内存泄漏的问题。内存泄漏的排查方法大致为:找准内存泄漏的时机,在泄漏的前后对内存进行快照,通过对比快照的内容判断内存泄漏的问题点。


首先,我们将调试的窗口切换到 Memory 页面,点击左上方的实心圆形按钮捕捉内存快照。



这样,我们就有了运行前的内存快照。现在我们执行存在内存泄漏的代码。这行代码有一个从未清理的全局缓存,随着调用的增加,越来越占内存。



随后,我们进行第二次内存快照,打开对比页面,通过对 Delta 值的分析,可以发现 concatenated string 这个部分增加了很多,很有可能有问题。



打开以后,便可以发现内存中多存储了很多“recording time”的数据。



这些重复性的数据也就意味着代码中出现了内存泄漏,在代码中找到相关内容,进行调整,解决内存泄漏的问题。


除了云函数的控制台,也可以使用 Serverless Framework Dev 模式开启在线调试的功能。



头图:Unsplash

作者:松鹅

原文:https://mp.weixin.qq.com/s/QwF2ifJvZYM029LJXL_vVQ

原文:再见,本地环境!腾讯云全球首发:Serverless 在线远程调试

来源:TencentServerless - 微信公众号 [ID:ServerlessGo]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


2021 年 4 月 09 日 15:062298

评论

发布
暂无评论
发现更多内容

2020年第三季度《全国移动App 风险监测评估报告》

InfoQ_11eaedef67e9

App 移动安全 个人隐私安全

【全球案例】ESL 游戏公司如何通过 Jira 定制化解决方案连接全球团队

Atlassian

项目管理 敏捷 Atlassian Jira

教育场景方案升级| 打通业务前后端,少量开发快速上线(一):互动小班

ZEGO即构

在线教育 低代码

架构师训练营第 1 期 - 第四周课后练习

Anyou Liu

极客大学架构师训练营

为什么学Go(一)

soolaugust

go

java安全编码指南之:锁的双重检测

程序那些事

java安全编码 java安全编码指南 java代码规范 java代码安全

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(一)

陈泽云

人工智能 云计算 大数据 基础设施 国产操作系统

搞开发,写SQL就够了

棒锤🐮

sql mybatis springboot Web框架 Rocket API

生态共赢-anyRTC创业扶持计划

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

手把手带你玩转 openEuler | 初识 openEuler

openEuler

Linux 开源 操作系统

[Go并发编程实战课]01.Mutex学习笔记

custer

go

月薪60k的Java开发在阿里是什么级别?对技术能力有哪些要求?

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

4年Java经验,备战两月成功拿到美团、京东、字节offer

Java架构之路

Java 程序员 面试 编程语言

实现一个简单的 MobX

局外人

前端 js React

英特尔聚焦全栈量子研究:发布多项重磅量子计算研究成果

intel001

视频会议的应用

anyRTC开发者

ios 音视频 WebRTC 直播 安卓

TNFE-Weekly[第七十五周已更新]

莹姐🙈

小程序 前端 周报

[Go 并发编程实战课]02.Mutex 源代码

custer

go

蚁架构师首推SpringBoot套餐(原理+实战+面试)

小Q

Java 学习 架构 微服务 SpringBoot 2

vidyo在数字化办公中提供了什么便利?

dwqcmo

音视频会议 集成架构 解决方案 智能硬件

spring-boot-route(十五)整合RocketMQ

Java旅途

Java RocketMQ Spring Boot

TensorFlow 篇 | TensorFlow Serving API

Alex

tensorflow keras model serving tensorflow serving api

1分钟将vscode撸成小霸王

gamedilong

前端 vscode

WebSocket从入门到精通,半小时就够!

JackJiang

html5 网络编程 websocket 即时通讯

【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!

冰河

并发编程 高并发 架构设计 秒杀 异步

架构师训练营第四周作业

四夕晖

LeetCode题解:145. 二叉树的后序遍历,栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Java零基础到进阶宝典!从小白到大神,金九银十面试这届斩获23K月薪

Java架构追梦

Java 学习 架构 面试 核心知识点

只要十步,你就可以应用表达式树来优化动态调用

newbe36524

C# netcore ASP.NET Core

技术解析 | 云游戏在未来如何实现?

腾讯云视频云

开发 游戏 视频

区块链数字货币交易所开发app,交易平台搭建方案

WX13823153201

区块链数字货币交易所开发

再见,本地环境!腾讯云全球首发:Serverless 在线远程调试-InfoQ