首页 > 其他分享 >前端调试技巧:从 Console 到 Chrome DevTools 的进阶指南

前端调试技巧:从 Console 到 Chrome DevTools 的进阶指南

时间:2024-12-22 09:30:26浏览次数:7  
标签:console log Chrome 断点 Console DevTools data 调试 const

作为前端开发者,你可能每天都在和 Bug 打交道。有时候一个简单的问题可能会耗费几个小时,而掌握正确的调试技巧可以大大提高解决问题的效率。今天,我就来分享一些在实际工作中常用的调试技巧。

Console 的高级用法

除了常见的 console.log,Console 还有很多强大的功能:

// 1. 使用 console.table 展示数组或对象
const users = [
  { id: 1, name: 'Alice', role: 'admin' },
  { id: 2, name: 'Bob', role: 'user' }
];
console.table(users); // 以表格形式展示数据

// 2. 使用 console.group 分组日志
console.group('用户操作');
console.log('开始处理用户数据');
console.log('数据处理完成');
console.groupEnd();

// 3. 使用 console.time 测量代码执行时间
console.time('数据处理');
processLargeData();
console.timeEnd('数据处理');

// 4. 条件断点日志
console.assert(user.age > 18, '用户年龄不符合要求');

// 5. 使用 console.trace 追踪函数调用栈
function deepFunction() {
  console.trace('函数调用追踪');
}

断点调试的艺术

1. 源代码断点

async function fetchUserData() {
  try {
    // 在这里设置断点
    const response = await fetch('/api/users');
    const data = await response.json();

    // 条件断点示例
    if (data.status === 'error') {
      throw new Error('获取用户数据失败');
    }

    return data;
  } catch (error) {
    console.error('Error:', error);
    throw error;
  }
}

2. DOM 断点

// 在 Elements 面板中,右键点击 DOM 元素,可以设置以下断点:
// 1. subtree modifications(子树修改)
// 2. attribute modifications(属性修改)
// 3. node removal(节点删除)

// 示例:监听 DOM 变化
const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    console.log('DOM 变化类型:', mutation.type);
    console.log('变化的节点:', mutation.target);
  });
});

observer.observe(document.body, {
  childList: true,
  subtree: true,
  attributes: true
});

网络调试技巧

1. Network 面板使用

// 1. 模拟弱网环境
// 在 Network 面板中设置 Throttling

// 2. 请求拦截和修改
async function fetchWithRetry() {
  const MAX_RETRIES = 3;
  let retries = 0;

  while (retries < MAX_RETRIES) {
    try {
      const response = await fetch('/api/data');
      // 在 Network 面板中查看请求详情
      return await response.json();
    } catch (error) {
      retries++;
      console.warn(`重试第 ${retries} 次`);
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  }

  throw new Error('请求失败');
}

2. 请求调试

// 1. 使用 async/await 配合调试
async function debugRequest() {
  // 设置断点,检查请求参数
  const params = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ id: 1 })
  };

  const response = await fetch('/api/data', params);
  // 设置断点,检查响应数据
  const data = await response.json();

  return data;
}

// 2. 拦截 Ajax 请求
const originalFetch = window.fetch;
window.fetch = async function(...args) {
  console.log('请求参数:', args);
  const response = await originalFetch.apply(this, args);
  console.log('响应数据:', response.clone());
  return response;
};

性能调试

1. Performance 面板使用

// 1. 记录性能数据
performance.mark('startProcess');

// 执行一些操作
heavyComputation();

performance.mark('endProcess');
performance.measure('处理间', 'startProcess', 'endProcess');

// 2. 使用 User Timing API
class PerformanceMonitor {
  static start(label) {
    performance.mark(`${label}:start`);
  }

  static end(label) {
    performance.mark(`${label}:end`);
    performance.measure(label, `${label}:start`, `${label}:end`);

    const measures = performance.getEntriesByName(label);
    console.log(`${label} 耗时:`, measures[0].duration);
  }
}

// 使用示例
PerformanceMonitor.start('数据处理');
processData();
PerformanceMonitor.end('数据处理');

2. Memory 面板使用

// 1. 内存泄漏检测
class MemoryLeakExample {
  constructor() {
    this.data = new Array(10000).fill('大量数据');

    // 错误示例:事件监听器未清除
    window.addEventListener('resize', this.onResize.bind(this));
  }

  // 正确的销毁方法
  destroy() {
    window.removeEventListener('resize', this.onResize);
    this.data = null;
  }

  onResize() {
    console.log('窗口大小改变');
  }
}

// 2. 使用 Chrome Task Manager 监控内存使用
// Chrome菜单 -> More Tools -> Task Manager

React 开发者工具调试

// 1. 组件性能分析
const ProfiledComponent = React.memo(function Component(props) {
  // 使用 React Profiler 记录渲染性能
  return (
    <React.Profiler id="MyComponent" onRender={onRenderCallback}>
      <div>{props.data}</div>
    </React.Profiler>
  );
});

// 2. 使用 React DevTools 的 Components 面板
function DebuggableComponent() {
  const [state, setState] = useState(initialState);

  useEffect(() => {
    // 在 Components 面板中查看 hooks 状态
    console.log('Component mounted');
  }, []);

  return <div>{state}</div>;
}

Vue 开发者工具调试

// 1. 使用 Vue Devtools 调试状态
export default {
  data() {
    return {
      debugData: {
        count: 0,
        items: []
      }
    }
  },

  mounted() {
    // 在 Vue Devtools 中观察数据变化
    this.debugData.count++;
  }
}

// 2. 性能追踪
if (process.env.NODE_ENV !== 'production') {
  Vue.config.performance = true;
}

移动端调试

// 1. 使用 vConsole 进行移动端调试
import VConsole from 'vconsole';

if (process.env.NODE_ENV !== 'production') {
  new VConsole();
}

// 2. 远程调试配置
class RemoteDebug {
  static init() {
    window.onerror = function(msg, url, line, col, error) {
      // 发送错误信息到远程服务器
      fetch('/api/log', {
        method: 'POST',
        body: JSON.stringify({
          message: msg,
          url,
          line,
          col,
          error: error?.stack
        })
      });

      return false;
    };
  }
}

调试小技巧

1. 代码片段(Snippets)

// 在 Sources > Snippets 中保存常用的调试代码
// 示例:检查页面性能
(function checkPerformance() {
  const timing = performance.timing;
  const navigationStart = timing.navigationStart;

  console.table({
    '页面加载完成时间': timing.loadEventEnd - navigationStart,
    'DOM 准备时间': timing.domInteractive - navigationStart,
    '首次渲染时间': timing.domContentLoadedEventEnd - navigationStart
  });
})();

2. 工作区(Workspace)

// 在 Chrome DevTools 中直接编辑和保存文件
// 1. 在 Sources 面板添加本地项目文件夹
// 2. 允许 Chrome 访问本地文件
// 3. 现在可以直接在 DevTools 中编辑文件并保存到本地

写在最后

调试是前端开发中非常重要的一环,掌握这些调试技巧可以让你的开发过程更加顺畅。记住,好的调试能力不仅仅是工具的使用,更重要的是培养解决问题的思维方式。

希望这些技巧能帮助你在日常开发中更快地定位和解决问题。如果你有其他好用的调试技巧,也欢迎在评论区分享!

如果觉得这篇文章对你有帮助,���忘了点个赞

标签:console,log,Chrome,断点,Console,DevTools,data,调试,const
From: https://blog.csdn.net/ChengFengTech/article/details/144640066

相关文章

  • chrome浏览器如何恢复最近关闭的页面
    前言大家好,我是小徐啊。谷歌chrome浏览器是我们在开发Java应用的时候,常用的浏览器。这个浏览器功能十分强大,非常适合我们进行开发调试代码。有时候,我们打开了一个页面,但由于手误关闭了,或者关闭了,想再恢复,有没有好的办法呢?其实是有的。今天,小徐就来介绍下如何快速恢复刚才关闭的页......
  • 让Chrome http3[QUIC]通信支持所有类型证书,自签名+信任机构
    Chromehttp3通信默认仅支持信任机构发行的证书,.net的开发者证书或CloudFlare的10年证书,或者其他自己创建的自签名证书是开启不了http3通信的。通过下面设置可以开启对自签名证书的支持,这样就可以愉快的使用http3测试了:Chrome最新版,目前是131,地址栏输入:chrome://flags,然后搜......
  • Chrome 132 版本开发者工具(DevTools)更新内容
    Chrome132版本开发者工具(DevTools)更新内容一、使用Gemini调试Network、Source和PerformanceChrome131可以使用Gemini调试CSS,现在可以调试更多模块了与元素面板中的右键菜单类似,要打开AI辅助面板并开始与Gemini的聊天,可以通过以下方式操作:在Network面......
  • Flutter OHOS flutter_console
    flutter_consoleAFlutterConsoleUI项目介绍一个在Flutter端Console可视化的组件,将ConsoleWindow置于页面最顶层,用于调试,输出日志等。安装使用安装步骤简单Demoimport'package:flutter/material.dart';import'dart:async';import'package:flutter_console/flutter_......
  • HTML打包EXE中的WebView2(免费)与Chrome内核的区别和使用场景详细介绍
    背景 近期有不少朋友使用了HTML一键打包EXE工具中的Webview2(免费)内核,询问的比较多的就是Webview2和Chrome内核的区别,这里会给大家做一个简单的介绍.WebView2是由微软提供的一种控件,它允许开发人员在本机应用程序中嵌入web技术(如HTML、CSS和JavaScript)。WebView2......
  • 11CSS属性-颜色表示-chrome调试-浏览器渲染
    一、今日内容首先对这些属性进行一个演练想要深刻理解所有常用的CSS属性,最好先学会以下几个最基础最常用的CSS属性font-size文字大小color前景色(文字颜色)background-color背景色width宽度height高度二、对CSS常用属性进行演练1、字体的默认大小是16px的还可以看到字......
  • chrome跳转新页面自动打开devtools调试工具的方法例子解析
    代码示例:根据您的需求,要在Chrome浏览器中实现跳转新页面时自动打开开发者工具(DevTools),以下是详细的步骤:方法一:设置Chrome开发者工具偏好打开Chrome浏览器。打开开发者工具。您可以通过点击页面右上角的三个点(菜单按钮),选择“更多工具”>“开发者工具”,或者使用快捷键F1......
  • 神了,Chrome 这个记录器简直是开发测试提效神器 转载
    在开发工作中,你是否遇到过这样的场景:当你需要开发某个功能时,这个功能依赖一系列的点击或者选择操作,才能获取到最终的数据。而在开发和调试的过程中,你往往需要多次验证流程的正确性。早期的时候,这种验证通常非常繁琐——你可能需要反复提交表单、重新执行操作流程,才能完成一次完......
  • 最新版chrome如何下载和安装?附安装包
    前言大家好,我是小徐啊。我们在Java开发应用的时候,经常是需要用到浏览器来帮助我们开发的。而浏览器中,谷歌浏览器chrome当属功能最强大的浏览器。今天小徐就来介绍下如何安装chrome。文末附获取方式。如何安装chrome首先,双击chrome的安装包,开始安装。然后,可以看到,显示正在连接......
  • 性能测试-jvm监控工具jconsole
    在jdk的bin目录下,运行jconsole.exe程序可以打开工具在使用java命令启动服务时添加如下参数-Dcom.sun.management.jmxremote                    #启用jmx-Djava.rmi.server.hostname=10.0.0.100                    #运行的......