5分钟教会你如何在生产环境debug代码

这篇具有很好参考价值的文章主要介绍了5分钟教会你如何在生产环境debug代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

有时出现的线上bug在测试环境死活都不能复现,靠review代码猜测bug出现的原因,然后盲改代码直接在线上测试明显不靠谱。这时我们就需要在生产环境中debug代码,快速找到bug的原因,然后将锅丢出去。

5分钟教会你如何在生产环境debug代码

生产环境的代码一般都是关闭source map和经过混淆的,那么如何进行debug代码呢?我一般都是使用这两种方式debug线上代码:“通过console找到源代码打断点”和“通过network面板的Initiator找到源代码打断点”。

通过console找到源代码打断点

打开浏览器控制台的console面板,在上面找到由bug导致抛出的报错信息或者在代码里面通过console.log打的日志。然后点击最右边的文件名称跳转到具体的源码位置,直接在代码中打上断点就可以debug代码了。

5分钟教会你如何在生产环境debug代码

如果点击右边的文件名后出现这种404报错的情况。
could-not-load-content-for-webpack://***-(fetch-through-target-failed:-unsupported-url-scheme;-fallback:-http-error:-status-code-404,-net:: ERR_UNKNOWN_URL_SCHEME)

只需要点击控制台右边倒数第三个图标setting(设置),将preferences(偏好设置)中的Enable JavaScript source maps(启用 JavaScript 源代码映射)取消勾选后再重新点console最右边的文件名称即可。

5分钟教会你如何在生产环境debug代码

这种方式很简单就可以找到源代码,但是有的bug是没有报错信息的,而且我们也不可能到处都给代码加上console.log,所以这种方式有一定的局限性。

通过network面板的Initiator找到源代码打断点

将鼠标放到请求的Initiator(启动器)后,就会显示当前请求完整的调用链中的方法和函数。假如请求是由A函数中发起的,B函数调用了A函数,C函数又调用了B函数。那么这种情况中Initiator就会按照顺序依次将A、B、C函数都列出来。

了解了Initiator的作用思路就清晰了,我们只需要找到离bug最近的一个接口请求,然后从调用链中找到我们需要的方法或者函数就可以了。

这时有的小伙伴又会说了,线上的代码都是经过混淆的,原本代码中的函数和变量经过混淆后已经都不是原本的名字了,那么我们怎么知道调用栈中哪个是我们想要找的函数呢?

确实函数和变量名称经过混淆后已经变得面目全非了,但是对象中的方法和属性名称是不会被修改的,还是会保留原本的名字。比如我们有一个对象名字叫user,user中有个名叫dance的方法。经过混淆后user对象的名字可能已经变成了U,但是dance方法还是叫原本的名字,不会被修改。利用这一点我们可以在调用栈中找到我们熟悉的对象方法名称就可以很快的定位到源代码。

举个例子,我们当前有个service/common.js文件

import axios from "axios";

const urls = {
  messageList: "http://127.0.0.1:3000/api/getMessageList",
};

const methods = {
  getMessageList() {
    return axios({
      method: "get",
      url: urls.messageList,
    });
  },
};

export default {
  urls,
  methods,
};

业务组件中这样调用

import CommonService from "@/service/common.js";

async function initData() {
  const res = await CommonService.methods.getMessageList();
  const formatData: Array<Message> = handleFormatData(res.data.list);
  messageList.value = formatData;
}

Initiator调用栈中就可以很容易的找到getMessageList方法,并且我们知道getMessageList方法是我们的initData调用的。那么在调用栈中getMessageList的上一个就是我们想要找的源代码位置,点击文件名称就可以跳转到目标源代码具体的位置。

5分钟教会你如何在生产环境debug代码

5分钟教会你如何在生产环境debug代码

如果跳转到源代码后代码是被压缩的状态,点左下角的花括号将代码格式化。找到具体的定位后,经过比对其实混淆后的代码和源代码其实差别不是特别大,debug代码还是很容易的。

这时有的小伙伴又会问了,假如我们出现bug的地方没有接口请求怎么办呢?

这种情况也可以利用Initiator调用栈找到对应的源代码js文件,然后搜索你知道的属性和方法名字,因为属性和方法名称在混淆的过程中是不会被重写的。这样也可以找到源代码的位置。

总结

这篇文章主要介绍了两种在线上debug源码的方法。第一种方法是在控制台找到console输出,点击console右边的文件名称跳转到源码进行debug。第二种方式通过请求的Initiator调用栈,找到源代码中对应的方法,点击文件名称也可以跳转到源代码具体的位置。

如果我的文章对你有点帮助,欢迎关注公众号:【欧阳码农】,文章在公众号首发。你的支持就是我创作的最大动力,感谢感谢!文章来源地址https://www.toymoban.com/news/detail-804897.html

到了这里,关于5分钟教会你如何在生产环境debug代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】软件安装(三分钟教会你如何在linux下安装软件)

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️Linux之路       🛰️社区:✈️进步学堂 我们在使用windows系统的时候可以安装各种软件。那么Linux中能不能安装软件呢?答案当然是可以

    2024年02月04日
    浏览(27)
  • Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!

    如果一个目录中文件数不是很多,那就可以一眼看出其中有多少个文件。但是如果计算子目录在内的文件数呢?或者如果文件数量很多,比如几百上千个,那么怎么确切地知道该目录下的文件数呢? 今天我们总结一下查看 Linux 中目录下文件数量的方法。 最简单的方法是使用

    2023年04月13日
    浏览(35)
  • webpack与vue-cli合并配置,打包生产环境代码时如何删除所有的console.log、代码注释和debugger

    本文基于vue-cli 5.0.0,webpack 5.0,TerserWebpackPlugin 最近公司项目开发上线后,发现控制台有很多当时测试时打印的信息。但是如果手动删除然后打包的话工作量太大,而且不利于以后的维护和debugger。所有必须通过webpack打包时自动帮我们删除console和注释。 第一步上网找到webpack关于

    2024年02月04日
    浏览(39)
  • ChatGPT 从入门到精通12:教你如何用AI 五分钟做出一个高大上的PPT

    ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 这是《ChatGPT ,从入门到精通》第12篇基础教程,今天将向大家介绍如何利用 ChatGPT 和其他 AI 工具制作 PPT。 「一、制作 PPT 的烦恼」 俗话说得好,工

    2024年02月13日
    浏览(181)
  • 一分钟教会你ai绘画怎么操作

    嘿,朋友们!今天我想和大家聊一聊人工智能绘画。你们有没有听说过这项技术?简单来说,就是用计算机程序来创作艺术作品,比如绘画、音乐等等。最近这种技术越来越受到人们的关注,也有很多网站和应用程序开始提供这种功能。但是,你们知道怎么使用这种技术吗?

    2024年02月09日
    浏览(37)
  • au怎么提取人声?一分钟教会你!

    提取人声技术可以帮助人们获得更清晰、纯净的声音,以满足不同的需求,如音频处理、字幕制作和学习外语等。那么如何利用AU提取人声呢?下面介绍了三种相关的方法。 一、使用AU软件 1 、打开AU软件,按【ctrl+o】,选择音频文件进行导入。 2 、点击【效果】,点击【立体

    2024年02月06日
    浏览(41)
  • 【ETL工具】本地环境IDEA远程DEBUG调试Flume代码

    🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油! 🪁🍁🪁🍁🪁🍁🪁🍁 目录 🦄 个人主页——🎐个人主页 🎐✨🍁 一、问题说明 二、操作步骤 2.1 idea创建远程调试 Flume 自定义 HDFS-Sink,远程服务器进行部署flume打包好后的代码,本地监控远程flume程序

    2024年02月08日
    浏览(29)
  • 一周工作5分钟完成!新版文心一言实测:秒秒钟出广告片,几句话搞定代码,办公科研生产力直接ProMax...

    金磊 发自 凹非寺 量子位 | 公众号 QbitAI 家人们,百度 文心一言 的插件,现在可以 联动 着用了—— 只要 几十秒 ,立马给你生成一个专业广告大片! 话不多说,直接先来看一下成品: 不信? 没关系,我们现在就来手把手地 实操演示 一下。 首先就是要把要用到的文心一言

    2024年02月11日
    浏览(31)
  • 如何用python做交互式界面?五分钟教会你。

    之前写了一个用Python制作的登陆界面的文章,这次教大家实现一个简单的注册界面,跟登陆相比,注册界面新增了一个上传头像的功能,以及将注册信息保存到本地txt文件中的功能,最终实现的效果是这样的   在导入必要的库之后,我们先创建一个宽度为350,高度为220的窗口

    2024年02月05日
    浏览(36)
  • 案例实践:零基础完成Loadrunner压力测试,十分钟教会你

    摘要:最近笔主带着两位新入职的同事进行了公司新平台的压力测试,工具选择的当然是Loadrunner,小笔发现有很多刚入门Loadrunner的小白都会遇到很多相似的问题,但是这些问题并不能在各大搜索网站上得到完善的解决。因此,小笔选中了51testing这个流量给力认可度高的专业

    2023年04月09日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包