线上出bug了?别怕,这么定位!

小编推荐: Fundebug提供JS、微信小程序、微信小游戏,Node.js和Java错误监控。真的是一个很好用的错误监控服务,众多大佬公司都在使用。

摘要: Source Map还是很神奇的。

  • 原文:线上出bug了?别怕,这么定位!
  • 公众号:前端小苑

Fundebug经授权转载并修改,版权归原作者所有。

工作中,生产环境代码是编译后代码,搜集到报错信息的行和列无法在源码中对应,很多时候只能靠“经验”去猜,本文针对这种情况,开发了一个npm命令行小工具,帮助快速定位报错的源码位置,提升效率。

由于现在构建工具盛行,前端部署的代码都是经过编译,压缩后的,于是乎,SoueceMap就扮演了一个十分重要的角色,用来作为源代码和编译代码之间的映射,方便定位问题。

测试SourceMap功能

首先全局安装reverse-sourcemap

npm install --global reverse-sourcemap

选择编译后的代码进行测试,下面是vue项目编译生成的代码。

在命令行执行命令,将main.js反编译回源码,并输出到sourcecode目录下。

reverse-sourcemap -v dist/main.a8ebc11c3f03786d8e3b.js.map  -o sourcecode

上面是执行命令输出的sourcecode目录,生成的目录结构和源码目录一致,打开一个文件,和源码做下对比:

可以看出,反编译出的代码无论目录结构还是具体代码都和源码一致。

生产环境代码报错如何定位源码位置

如果使用了Fundebug的Source Map功能的话,则可以很方便的定位出错位置:

如果没有使用监控工具的话,生产环境的代码,经过压缩、编译,很不利于Debug。针对这个问题,需要准备一份生产环境代码的map文件,为了方便,可以在项目的package.json增加debug命令用来生成map文件。这条命令除了开启sourcemap,其他的具体webpack配置和生产环境配置相同。

    "scripts": {"start": "vue-cli-service serve --mode dev","stage": "vue-cli-service build --mode staging","online": "vue-cli-service build","debug": "vue-cli-service build --mode debug"}

有了map文件,通过SourceMap提供的API就可以定位到源码的位置。下面是实现的核心代码。

// Get file content
const sourceMap = require('source-map');
const readFile = function (filePath) {return new Promise(function (resolve, reject) {fs.readFile(filePath, {encoding:'utf-8'}, function(error, data) {if (error) {console.log(error)return reject(error);}resolve(JSON.parse(data));});});
};// Find the source location
async function searchSource(filePath, line, column) {const rawSourceMap = await readFile(filePath)const consumer = await new sourceMap.SourceMapConsumer(rawSourceMap);const res = consumer.originalPositionFor({'line' : line,'column' : column});consumer.destroy()return res
}

最重要的就是使用SourceMap提供的 originalPositionFor API。 SourceMapConsumer.prototype.originalPositionFor(generatedPosition)

originalPositionFor API的参数为一个包含line和column属性的对象
line 编译生成代码的行号,从1开始
column 编译生成代码的列号,从0开始
这个方法会返回一个具有以下属性的对象

{"source": "webpack:///src/pages/common/403.vue?c891", // 源代码文件的位置,如果无法获取,返回null。"line": 4, // 源代码的行号,从1开始,如果无法获取,返回null。"column": 24, // 源代码的列号,从0开始,如果无法获取,返回null。"name": "get" // 源代码的标识,如果无法获取,返回null。
}

源码定位工具

为了使用方便,我将这个功能做成了一个命令行小工具。全局安装后,不需要做任何配置就可以使用。

安装

npm install --global source-location

参数介绍

Usage: sl [options]Options:-v, --version           output the version number-p, --source-flie-path  The generated source file  编译后的map文件-l, --ine               The line number in the generated source  编译后代码行号-c, --column            The column number in the generated source  编译后代码列号-h, --help              output usage information

使用案例

终端执行命令:

sl -p dist/1.f47efcb58028826c7c05.js.map -l 1 -c 34 

命令行将会输出:源码的文件路径:path,源码行号:line,源码标识:name。

项目的github地址: github.com/front-end-y… 如有错误欢迎指出。

最后,推荐大家使用Fundebug,一款很好用的BUG监控工具,支持Source Map功能~

您可能感兴趣的

  • 你还在等着用户反馈BUG?
  • 如何优雅处理前端异常?
  • 线上出bug了?别怕,这么定位!
  • 前端错误收集(Vue.js、微信小程序)
  • Fundebug发布Vue插件,简化BUG监控接入代码
  • 30个极大提高开发效率的VS Code插件
  • 10个JavaScript难点
  • 10个最佳ES6特性
  • 重新思考单元测试
  • 不要争了!技术选择没那么重要
  • 用Fundebug插件记录网络请求异常
  • 没有Fundebug不能复现的BUG
  • 黑科技!Fundebug支持网页录屏!
  • Vue.js@2.6.10更新内置错误处机制,Fundebug同步支持相应错误监控

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18099.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机进水开机android,手机进水?别怕,一个软件就能自救!

原标题:手机进水?别怕,一个软件就能自救! 号称防水的手机,越来越多了。但无论哪种级别,都不可能绝对保证手机的安全。 毕竟,有句话怎么说来着:「防水贱不防手贱」。 当你在泳池旁边玩…

别怕,卷积其实很简单

原文地址:https://blog.csdn.net/qq_39521554/article/details/79083864 相信很多时候,当我们在看到“卷积”时,总是处于一脸懵逼的状态,不但因为它的本义概念比较难理解,还因为它在不同的应用中发挥出的变幻莫测的作…

不会写用户帮助文档怎么办?别怕,Baklib有招

产品售后服务难,客服人员压力大,客户不满意。相信这是很多企业都面临的问题,产品是卖出去了,但是做不完的售后,回答不完的重复问题,电话、微信响个不停,售后服务一直都是企业的一个痛点&#xf…

MySQL数据库root密码忘记了别怕,看这里

忘记的话我们需要重置root密码,然后进行重设root密码,下面我来讲一下流程 1,打开任务管理器先将MySQL服务停掉 2,找到c盘下面的my.in文件,并使用管理员权限打开,找到[mysqld],在下面添加skip-g…

计算机CPU高温,电脑cpu温度高怎么办?别怕,三招搞定

cpu温度多少才算正常呢? 一般来说CPU温度控制在正负30度范围内是比较正常的,我们这里只说正的,比如现在室温是25度,那么升温30度就是55度,也就是说在室温25度时将CPU温度控制在55度之内是最理想的状况。 当然实际生活中我们使用电脑时CPU温度会经常超过这个温度,特别是在…

别怕看源码,一张图搞定Mybatis的Mapper原理

目录 简单使用 引出主题 看图 提到看源码,很多同学内心的恐惧的,其实这个从人性的角度来说是非常正常的,因为人们对未知的事物,都是非常恐惧的,其次,你内心可能始终觉得,好像不会原理也还是能工作啊,你的潜意识里没有强烈的欲望.从阅读源码的经历来说,Java三大框架SSM中,Myb…

别怕,“卷积”其实很简单

以前的文章没法用推荐卡,这是我2017年写的,所以重新发表一次,大家温习温习~ 前言 相信很多时候,当我们在看到“卷积”时,总是处于一脸懵逼的状态,不但因为它的本身概念比较难理解,还因为它在不…

赵小楼《天道》《遥远的救世主》深度解析(124)遇事别怕,出事别躲

关注赵小楼,与10000人一起重读天道,学习强势文化思维! 本文是按《遥远的救世主》小说情节深度解析的第124集,按小说解读完后会按《天道》电视剧不同于小说的情节解读,按情节全部解读完,会出专题解读系列【总…

年终总结没有思路?别怕,这里有一个万能写法

一晃又到了年底,年终总结又要开始准备了~ 最近很多小伙伴在后台留言,希望我们出一篇「如何做好年终总结」的文章。 害,谁让我不忍拒绝你们呢,安排! 年终总结其实并不难写,很多人感觉难写的原因一般有两个…

亚马逊被关联?别怕有救

我的亚马逊被关联了,最近我们身边充斥着这样的声音。亚马逊 突如其来的大规模查封账号让不少跨境人苦不堪言。伤心过后我们来看看亚马逊账户是怎么关联的,之后又怎么解决呢。 亚马逊被关联是平台误操作,有救 如果是因为平台的误操作导致亚马…

写简历没模板?别怕,这些开源项目帮你搞定!

大家好,我是 JackTian。 今年因特殊原因,有一些小伙伴想着在年后跳槽找一份好工作,而恰恰无法预料到会发生这样的事情,所以导致失业甚至只能在原单位忍受着了。 找工作的第一件事情,就是写简历。往往写出一份好的简历…

别怕,BCH无惧攻击

对于数字货币来说最害怕的莫过于黑客和51%攻击。前有黑客利用以太坊 ERC-20 智能合约中的漏洞攻击美链和SMT,导致其币价几乎归零。后有比特币黄金BTG和XVG遭受黑客51%攻击损失惨重。因此每当听到有这一类的消息时,大家的心情都会变得沉重起来。 最近比特…

阳了别怕,保护好自己

关注、星标公众号,直达精彩内容 图片素材来源:网络素材 作者:技术让梦想更伟大 | 李肖遥 最近已经陆续有四五个同事🐏了,如果是上一周,那我现在也是妥妥的密接了,不过现在放开的趋势愈发明显&am…

别怕,只是孤独

写于2019-09-21 对,这个标题是来自一期脱口秀。让我想,孤独是什么?其实我也不知道。可能是某一刻突然地就心酸了一下,过会儿发现其实也没啥,不就是孤独嘛。 ​ 看了百度百科对孤独的解释,也就是孤单一个人…

暴跌不期而至

‍‍ 原标题:当你还在用ChatGPT瞎聊时,有人早已用AIGC赚到了数百万美元 * * * 隔夜比特币表现平稳,仍在23k上方震荡。就在发文的一刹那,暴跌不期而至。比特币极速下挫至22k。 * * * AIGC 是 AI Generated Content(AI&a…

拍视频没有素材怎么办?chatGPT来帮您!!!

以下是一个有趣的笑话脚本: 【脚本开始】 场景:办公室 角色:杰克(中年男性)、莉莉(年轻女性) 杰克:嘿,莉莉!你听说过新的办公室笑话吗? 莉莉&…

【ChatGPT系列话题】金融行业大语言模型应用落地

易观:ChatGPT和GPT-4陆续发布,引发了我们对于大模型在各个行业可能应用方向的想象与探索,包括今天我们重点提到的金融行业。在金融行业,大模型有非常多的应用场景,包括投研、产品研发、授信审核等,例如使用…

LLaMA模型微调版本 Vicuna 和 Stable Vicuna 解读

Vicuna和StableVicuna都是LLaMA的微调版本,均遵循CC BY-NC-SA-4.0协议,性能方面Stable版本更好些。 CC BY-NC-SA-4.0是一种知识共享许可协议,其全称为"署名-非商业性使用-相同方式共享 4.0 国际"。 即 用的时候要署名原作者&#x…

什么是In-Context Learning(上下文学习)?

©作者 | 董冠霆 单位 | 北京邮电大学 研究方向 | 自然语言理解 前言 随着大模型(GPT3,Instruction GPT,ChatGPT)的横空出世,如何更高效地提示大模型也成了学术界与工业界的关注,因此 In-context learn…

ACL2023论文写作能否使用ChatGPT?

每天给你送来NLP技术干货! 来自:HFL实验室 随着以ChatGPT为代表的生成式AI的火热,近期人工智能领域的顶级会议相继推出相关政策以进一步规范这类工具在科学文献撰写中的使用。ACL 2023程序委员会主席在近期的一篇博客中披露了ACL 2023大会的相…