vscode调试Electron+ts

news2025/1/19 16:57:25

调试Electron+js

调试Electron+js: https://www.electronjs.org/zh/docs/latest/tutorial/debugging-vscode


调试Electron+ts

首先看一下,我的目录结构。目录结构决定了launch.json中的路径部分。我将在项目根目录下进行调试,项目根目录下包含electron代码部分,和src等前端代码部分。
在这里插入图片描述

1.创建.vscode,创建launch.json。调试Electron+ts代码部分。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Main",
      "runtimeExecutable": "${workspaceRoot}/electron/node_modules/.bin/electron",	// 我的electron外部库放在./electron/node_modules下面。如果你的放在./根目录下,改成'${workspaceRoot}/node_modules/.bin/electron'
      "runtimeArgs": [
        "./electron",	// 这里也是,我的electron的入口文件main.ts放在./electron目录下。如果你的在根目录./,改成'.'
        // this args for attaching render process
        "--remote-debugging-port=9222"
      ],
      "windows": {
        "runtimeExecutable": "${workspaceRoot}/electron/node_modules/.bin/electron.cmd"
      },
      "protocol": "legacy"
    }
  ]
}

2.设置如下tsconfig.json(重要,且我的tsconfig.json在./electron/目录下)

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2015",
    "noImplicitAny": false,
    "sourceMap": true,	// 经过试验,这个一定要开启
    "moduleResolution": "node",
    "lib": ["es2016", "dom"],
    "baseUrl": "."
  }
}

3.经过以上配置后,如下的的main.ts文件,经过ts编译后(cd electron && tsc --module commonjs),ts将被编译到./electron/dist-electron中。查看dist-electron中,是否有.sourcemap后缀的文件,如果有应该就没有问题了。ts中打个断点,试一下。

import { app, BrowserWindow } from 'electron/main'
import path from 'node:path'

// 🚧 Use ['ENV_NAME'] avoid vite:define plugin - Vite@2.x
const VITE_DEV_SERVER_URL = 'http://localhost:8080/'

const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })

  if (!app.isPackaged) {
    win.loadURL('https://www.baidu.com')
  } else {
    win.loadFile(path.resolve(__dirname, '../dist-vite/index.html'))
  }
}

app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

在这里插入图片描述


如何调试渲染进程

1.更改launch.json为如下内容。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Main",
      "runtimeExecutable": "${workspaceRoot}/electron/node_modules/.bin/electron",
      "runtimeArgs": [
        "./electron",
        // this args for attaching render process
        "--remote-debugging-port=9222"
      ],
      "windows": {
        "runtimeExecutable": "${workspaceRoot}/electron/node_modules/.bin/electron.cmd"
      },
      "protocol": "legacy"
    },
    {
      "type": "chrome",
      "request": "attach",
      "name": "Renderer",
      "port": 9222,
      "webRoot": "${workspaceRoot}"	// Renderer 配置中的 webRoot 参数直接使用了 ${workspaceFolder},是因为在这个工程中,HTML 引用的静态资源位于根目录下。
    }
  ],
  "compounds": [	// configurations 中的两项分别对应主进程和渲染进程。compounds 中指定了一个组合会话 All,选择 All 将会同时启动这两个会话。
    {
      "name": "All",
      "configurations": ["Main", "Renderer"]
    }
  ]
}

2.在渲染进程中打一个断点。
在这里插入图片描述
3.启动前端调试服务器。根目录下直接启动Vite服务器(重要,不然前端代码无法执行到断点)。

npm run dev

4.新建一个cmd,选择debug标签页下的All,再按F5,启动两个调试器。
在这里插入图片描述
5.这个时候,前段代码中的断点可能没法打到(因为服务器已经启动了,已经过了断点的执行点了)。此时,刷新前段代码,就可以执行到了。
在这里插入图片描述


完整代码参考

Electron-vite-template


参考

VS Code debug specs - Electron Java Script & Type Script
Electron 应用调试指南

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows Qt中支持heic 图片显示

安装vcpkg: git clone https://github.com/microsoft/vcpkg 执行脚本: .\vcpkg\bootstrap-vcpkg.bat 在安装之前如果需要指定vs的编译器, 在如下文件中做更改, 我指定的是用vs2019编译的: D:\vcpkg\vcpkg\triplets 增…

腐烂的橘子 - (LeetCode)

一、概述 994. 腐烂的橘子 - 力扣(LeetCode),今天刷到这道题,开始按照自己实现的思路写了一次,通过了调试,但是提交的时候,来了一个大的数据,就没有通过测试,百思不得其…

Redis-持久化操作-RDB

Redis持久化 由于Redis的数据都存放在内存中,如果没有配置持久化,Redis重启后数据就全丢失了,于是需要开启 Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。 Redis提供了两个…

内联函数+auto关键字(C++11)+指针空指针nullptr(C++11)

内联函数auto关键字(C11)指针空指针nullptr(C11)详解 内联函数概念特性 auto关键字(C11)auto简介auto的使用细则auto不能推导的场景 基于范围的for循环(C11)范围for的语法范围for的使用条件 指针空指针null…

2024年 C++音视频开发学习路线(ffmpeg/rtsp/srs/webrtc/hls)

在音视频工作领域,很多人可能会陷入徘徊和迷茫的境地。音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;不知道如何学,怎样才能查漏补缺自己的技术短板。 对于音…

gpg从公钥服务器接收失败(gpg: keyserver receive failed: Server indicated a failure)

一、使用背景 apt update时发现错误,与签名相关。 于是添加签名(最后的签名编号换成自己的) apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 871920D1991BC93C但是这时候报错了,服务器连接不上 二、解决方案 …

从零开始学习Linux(6)----进程控制

1.环境变量 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,我们在编写C/C代码时,链接时我们不知道我们链接的动态静态库在哪里,但可以连接成功,原因是环境变量帮助编译器进行查找,环境变量通常具有…

Spring Boot + Mybatis-plus代码生成器 自动生成项目结构

首先创建一个新的springboot项目 项目初始化结构如下: 运行自动生成结构代码后的效果如下: 对比初始化项目结构可以发现结构中多了以下几个部分; controller文件夹存储接口类mapper文佳夹存储数据库映射model文件夹存储数据库模型类Service文件夹存储业…

在做题中学习(58):和为K的子数组

560. 和为 K 的子数组 - 力扣(LeetCode) 因为是判断子数组的和 要返回 k 的次数,所以 解法:前缀和 哈希表 提出一个概念:以下标i为结尾的所有子数组 那要找出所有和 k的子数组 就相当于:找出所有值为…

OpenAI发布最新的人工智能模型GPT-4o:可实时语言、图像交互

OpenAI 在周一宣布了一款新的旗舰生成式 AI 模型,他们将其称为 GPT-4o — 这里的 “o” 意指 “全方位”,指的是该模型处理文本、语音和视频的能力。GPT-4o 将会在接下来的几周逐步在公司的开发者和消费者产品中推出。 OpenAI 首席技术官米拉穆拉蒂表示…

Allegro如何输出各层PCB视图的PDF文件

如何输出各层PCB视图的PDF文件 1、说明 用Allegro设计好PCB后,有时需要出各层的PDF文档出来进行汇报和展示,这时就需要将各层的平面视图全部以PDF的形式加载出来,具体方法如下。 2、PDF文件的输出方法(以四层板为例) …

微信小程序的设计与实现

微信小程序的设计与实现 目录 1.系统简述: 2.开发工具及相关技术: 2.1 HTML、WXSS、JAVASCRIPT技术 2.2 Vanilla框架 2.3 uni-app框架 2.4 MYSQL数据库 3.工程结构及其说明: 4.主要功能展示 4.1登录 4.2 注册 4.3 首页…

腾讯宣布混元文生图大模型开源: Sora 同架构,可免费商用

5月14日,腾讯宣布旗下的混元文生图大模型全面升级并对外开源,目前已在 Hugging Face 平台及 Github 上发布,包含模型权重、推理代码、模型算法等完整模型,可供企业与个人开发者免费商用。 这是业内首个中文原生的DiT架构文生图开…

排序1——直接插入排序,希尔排序,选择排序,堆排序

1.排序的概念及其运用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录…

组合商标申请如何风控提高通过率!

最近一个老客户找到普推知产老杨,说要申请注册一个新的商标,是一个组合商标,有图形,两行文字,一行文字的拼音,还有三个字母的简称,组合商标在申请时会进行拆分审查,图形、文字、拼音…

C++干货--引用

前言: C的引用,是学习C的重点之一,它与指针的作用有重叠的部分,但是它绝不是完全取代指针(后面我们也会简单的分析)。 引用的概念: 引用 不是新定义一个变量 ,而 是给已存在变量取了一个别名 &#xf…

Rust学习笔记(中)

前言 笔记的内容主要参考与《Rust 程序设计语言》,一些也参考了《通过例子学 Rust》和《Rust语言圣经》。 Rust学习笔记分为上中下,其它两个地址在Rust学习笔记(上)和Rust学习笔记(下)。 错误处理 pani…

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码(一)编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…

LeetCode2215找出两数组的不同

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…

Kafka基础架构详解

Kafka基础架构 Kafka概述 1. Producer(生产者): 生产者是向 Kafka broker 发送消息的客户端。它负责将消息发布到指定的主题(Topic),并可以选择将消息发送到特定的分区(Partition&#xff09…