我正在开发一个Electron应用程序,
- 第一个月
[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
个@journeyapps/ [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
个@electron-force/ [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
个[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
- 节点v18.16.0
- 其他各种依赖关系
我在开发过程中使用Map到electron-forge start
的npm run start-electron
运行应用程序。下面我将描述的症状在我的机器(Ubuntu 20.04)上开发过程中经常发生。我还收到报告说,这发生在应用程序的早期访问分布式版本中-这些报告目前未经验证,但涉及Windows和Linux系统。
这是怎么回事
应用程序主进程经常突然退出,没有任何警告或明确的原因。node
进程退出,我被拖回终端。
- 终端窗口中没有日志输出。
- 我为
uncaughtException
和unhandledRejection
注册了处理程序;它们没有捕获事件。 - Electron的
before-quit
事件注册了一个处理程序。处理程序实现负责在用户启动的关机过程中进行清理。当应用程序消失时,此处理程序不会被调用。 - 进程退出代码(
$?
)始终为0
。 - 应用程序的单次启动可以稳定数小时,然后突然终止。其他启动几乎立即终止,实际上无法使用。
- 有足够的内存可用(目前,10千兆字节的物理未使用的机器上)。该应用程序没有表现出任何失控的内存使用,我已经看到。
- 我注意到,退出 * 可能 * 是在Sequelize查询运行后发生的(这些被记录到控制台)。这很难验证,因为它不是一个特定的查询,禁用Sequelize是不可行的,因为整个应用程序都是建立在它上面的。
BrowserWindow
示例保持为全局示例,以避免垃圾回收。- 我使用
ELECTRON_ENABLE_LOGGING=1
和ELECTRON_ENABLE_STACK_DUMPING=1
。
我目前不知道如何进行调试。我很少使用原生应用程序,即进程,因为我通常专注于Web应用程序,而这个Electron项目是一个罕见的项目。
由于退出代码是0
,我认为实际上有东西向主进程发送了退出事件。但我无法使用Electron的任何退出相关事件来查看或捕获此事件。我错过了哪些步骤?
1条答案
按热度按时间bpsygsoo1#
我也遇到了这个问题,问题出在加密数据库(@journeyapps/sqlcipher). https://github.com/TryGhost/node-sqlite3/issues/1543