惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
量子位
GbyAI
GbyAI
腾讯CDC
T
Tailwind CSS Blog
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
Docker
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
Jina AI
Jina AI
IT之家
IT之家
Y
Y Combinator Blog

博客园 - 北山秋叶

macos 上的 zsh 启动问题记录 Keychron Max 键盘改键指南 Github 命令在 命令行 中访问特别慢的解决方法 ai 随想 影响记忆 monorepo(多包)管理中, 引入的 css 文件丢失的问题 (或者说package.json中的 sideEffects 的探索) 浏览器插件 Obsidian web 与 Obsidian 插件 local rest api 结合配置过程记录 package.json中的版本号 mac 下检测网络状态的命令 git clone 需要用户名密码的一个小问题 怎么才能写一个好代码 yeoman编写自己的脚手架 await和promise结合使用的问题 有趣的二分 ngix反向代理-之反向 redux和flux究竟有什么不同, 说点自己的理解 npm发包记录 由一个聚焦-focus-事件异常跟踪引起的总结 git查看分支的几个方法 test-your-mind-快速测试自己的代码 给Promise在外部增加断点
js中调试技巧-打印日志信息
北山秋叶 · 2020-07-08 · via 博客园 - 北山秋叶

js中调试技巧-打印日志信息

平常调试代码的时候, 大部分情况下我们会采用 console.log 的形式进行处理.

但是这个是非常费事费力的一件事情. 因为这个地方是要进行代码的修改, 然后经过代码的 reload 之后,

是一件非常低效的事情. 而我们程序员是不会做低效的事情的

针对自己在工作中的场景, 总结了一下几种比较搞笑的方法进行打印

  1. 使用 dev-tools 打印变量信息

chrome 调试工具非常强大, 我们可以首先采用其中的调试工具来进行打印

  1. watcher 选择调试的代码变量或者表达式, 将其加入到 观察队列中, 运行到此处就会显示出信息
  2. 增加 断点log , 看图说话, 另外的几个功能也非常实用. 跟增加条件断点类似, 不过这里的会在控制台直接打印出来

    要说的是: 如果想设置一些额外信息, 也可以将变量挂载到 windows 全局上, 然后在下一个断点进行使用, 非常方便

  3. 手工输入 console.log. 可以实现将需要处理的变量挂载到 全局 windows 上去.
    比如我需要观察 obj 对象, 然后我可以这个样子

```js

window.obj = obj;

```

这样处理的时候, 只要在控制台直接输出 console.log(window.obj) 就可以了.
2. 打印调用栈信息

本来写这个主题就是打印堆栈信息的, 一下子变成打印日志信息了....

  1. console.trace(). 专事专办, 这个方法就是可以用来记录的.

  2. 如果不支持, 我们可以通过 arguments 中的 callee 和 caller 进行 (如果 es6 禁用掉了的话..., 那 console.trace 方法肯定支持)

    方法如下

      function trace () {
          var currentFunction = arguments.callee;
          var caller = currentFunction.caller;
          //当然你也可以增加层级控制, 见下边
          while(caller) {
              console.log(caller);
              caller = caller.caller;
          }
      }
    
      //增加一下层及控制
      //level: number
      function trace(level = 0) {
          var currentFunction = arguments.callee;
          var caller = currentFunction.caller;
          var count = 0;
          while(caller && count < level) {
              console.log(caller);
              caller = caller.caller;
              count ++;
          }
      }
    

简单说下 callee 和 caller

callee 其实就是方法自己, 通过 arguments 可以访问到
caller 指向调用当前方法的对象

所以, 比如以下代码


function a() {
    console.log(arguments.callee.caller.caller)
}

function b() {
    a();
}

function c() {
    b();
}

c();

就会打印

ƒ c() {
b();
}

其他的一个小技巧

chrome 还支持将打印的日志直接保存成文件, 便于统一通过 ide 进行分析

在打印输出的日志上边 右键 另存为即可~