vscode调试Electron+ts

调试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.mzph.cn/web/11869.shtml

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

相关文章

数据可视化(十一):Pandas餐饮信息表分析——交叉表、离群点分析,多维分析等高级操作

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

golang创建式设计模式------单例模式

目录导航 1.单例模式1)什么是单例模式 2)使用场景3)实现方式1.懒汉式单例模式2.饿汉式3.双重检查式4.sysc.Once式 4)实践案例5)优缺点分析 1.单例模式 1)什么是单例模式 单例模式(Singleton Pattern)是一种常用的设计模式。单例模式的类提供了一种访问其唯一对象的方法&#…

【数据结构】线性表--顺序表(二)

文章目录 1、什么是线性表2、线性表的基本操作3、顺序表3.1、顺序表的定义3.2、顺序表的实现方式:静态分配3.3、顺序表的实现方式:动态分配3.4、顺序表的特点3.5、顺序表的初始化与插入操作3.6、顺序表的删除与查询 1、什么是线性表 ​ 线性表是具有相同…

通过EXCEL控制PLC启停电机的一种方法

概述 本例将介绍用微软EXCEL电子表格控制西门子S7-1200 PLC实现电机启停的一种方法。 第1步: 添加PLC设备,选择西门子S7-1214C CPU,设置IP地址:192.168.18.18,子网掩码:255.255.255.0。 第2步&#xff1a…

vue3中通过自定义指令实现loading加载效果

前言 在现代Web开发中,提升用户体验一直是开发者们追求的目标之一。其中,一个常见的场景就是在用户与应用程序进行交互时,特别是当进行异步操作时(如网络请求),为用户提供即时的反馈,避免用户因…

【循环程序设计-谭浩强适配】(适合专升本、考研)

无偿分享学习资料,需要的小伙伴评论区或私信dd。。。 无偿分享学习资料,需要的小伙伴评论区或私信dd。。。 无偿分享学习资料,需要的小伙伴评论区或私信dd。。。 完整资料如下:纯干货、纯干货、纯干货!!…

浅谈电动汽车充电站的电气安全

1 引言 1月14日日上午10点左右,青岛市市北区辽宁路63号公交停车场内,一辆报废公交车突然起火,由于大风天气,大火很快引燃了停在旁边的几辆报废车。消防人员快速赶到,迅速控制住火势。11时30分,停车场内的…

鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main

阅读之前的说明 先说明,本篇很长,也很枯燥,若不是绝对的技术偏执狂是看不下去的.将通过一段简单代码去跟踪编译成ELF格式后的内容.看看ELF究竟长了怎样的一副花花肠子,用readelf命令去窥视ELF的全貌,最后用objdump命令…

Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!

前言 我们之前肯定已经见过了很多文本生成图片、文本生成声音以及AI翻唱歌曲 等多种AI产品(模型)。 其实音乐和图片从某种意义上来说都是艺术创作的一种形式,它们可以相互配合,共同呈现出一种更加丰富、感性的表达方式。 将图片…

弘君资本:人形机器人概念走强,盛通股份涨停,怡合达、鼎智科技等拉升

人形机器人概念14日盘中拉升走高,到发稿,盛通股份涨停,怡合达、鼎智科技涨约6%,索辰科技、伟创电气、丰立智能等涨超4%。 音讯面上,5月13日,宇树发布人形智能体Unitree G1,身高127cm,体重35kg&…

618值得入手的数码产品怎么选?2024 买过不后悔的数码好物分享

在数字时代的浪潮中,每一次的购物狂欢节都如同一场科技盛宴,让我们有机会接触到最前沿、最实用的数码产品,而“618”无疑是这场盛宴中最为引人瞩目的日子之一。面对琳琅满目的商品,如何选择那些真正值得入手的数码好物&#xff0c…

易宝OA-ExecuteQueryForDataSetBinary处sql注入

免责声明: 本文内容为学习笔记分享,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与作者无关!!&#…

Centos 安装jenkins 多分支流水线部署前后端项目

1、安装jenkins 1.1 安装jdk 要求:11及以上版本 yum install yum install java-11-openjdk 1.2 安装jenkins 导入镜像 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo出现以下错误 执行以下命令 sudo yum …

使用java远程提交flink任务到yarn集群

使用java远程提交flink任务到yarn集群 背景 由于业务需要,使用命令行的方式提交flink任务比较麻烦,要么将后端任务部署到大数据集群,要么弄一个提交机,感觉都不是很离线。经过一些调研,发现可以实现远程的任务发布。…

LOTO示波器软件PC缓存(波形录制与回放)功能

当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形。一帧数据的量 是 当前用户选择时基档位缓冲区总数据大小。不同时基档位缓冲区大小不同&am…

强化学习——马尔可夫过程的理解

目录 一、马尔可夫过程1.随机过程2.马尔可夫性质3.马尔可夫过程4.马尔可夫过程示例 参考文献 一、马尔可夫过程 1.随机过程 随机过程是概率论的“动态”版本。普通概率论研究的是固定不变的随机现象,而随机过程则专注于那些随时间不断变化的情况,比如天…

R语言两种方法实现随机分层抽样

为了减少数据分布的不平衡,提供高样本的代表性,可将数据按特征分层一定的层次,在每个层次抽取一定量的样本,为分层抽样。分层抽样的特点是将科学分组法与抽样法结合在一起,分组减小了各抽样层变异性的影响,…

C语言指针详解(三)

目录 前言 一. 回调函数是什么? 1.定义 2. 代码示例:计数器 2.1 使用回调函数改造前 2.2 使用回调函数改造后 二. qsort使用举例 1. qsort介绍 2. 使用qsort函数排序整型数据 3. 使用qsort排序结构体数据 三. qsort函数的模拟实现 四. sizeo…

代码随想录:螺旋矩阵II相关题目推荐(54、LCR146)

59.螺旋矩阵II 题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 代码(新解法&am…

MyBatis——MyBatis 参数处理

一、单个简单类型参数 简单类型包括: byte short int long float double char Byte Short Integer Long Float Double Character String java.util.Date java.sql.Date parameterType 属性:告诉 MyBatis 参数的类型 MyBatis 自带类型自动推断机制…