分析 vscode 运行 node.js 闪退时的场景

场景:使用 cmakejs 运行 js 代码时,出现了闪退问题

分析:需要加载相关 pdb 文件,如何使用 vscode 调试 js 代码,可以参考: 使用 vscode 调试 nodejs 代码

从弹出上后,触发了 abort 导致运行中断,结合控制台给出的信息

复制代码
D:\a\_work\1\s\src\vctools\crt\github\stl\src\mutex.cpp(64): mutex destroyed while busy
Request timeout.
Request timeout.

我们猜测是否与锁有关

那么如何查看崩溃的堆栈信息呢,首先,通过 RUN AND DEBUGJS Debug BuildWindows Attach 依附到 native 的线程上

再点击弹出的重试按钮,因为弹窗也提示了重试后查看错误信息,最终发现了崩溃的代码行

问题代码:

复制代码
std::unique_lock<std::mutex> lock(ctx->lock_);
  while (!ctx->called_)
    ctx->cv_.wait(lock);
  delete ctx;

从这段代码可以看出,lock 还没被释放掉就调用 delete 了,从而出现了 mutex destroyed while busy

修改:

复制代码
{
    std::unique_lock<std::mutex> lock(ctx->lock_);
    while (!ctx->called_)
      ctx->cv_.wait(lock);
  }
  delete ctx;

小结:使用 vscode 调试底层代码不熟悉,导致花了不少时间来研究如何查看崩溃的堆栈信息,最终才找出问题所在

相关推荐
GISer_Jing4 小时前
Canvas &SVG &BpmnJS编辑器中Canvas与SVG职能详解
前端·javascript·编辑器
量态猫4 小时前
pycharm无需科学上网工具下载插件的解决方案
ide·python·pycharm
事橙19994 小时前
ubuntu14.04/16.06 安装vscode(实测可以用)
vscode
GISer_Jing5 小时前
BPMN.js编辑器设计器与属性面板数据交互
javascript·编辑器·交互
binnnngo5 小时前
解决npm install报错:getaddrinfo ENOTFOUND registry.nlark.com
前端·npm·node.js
Liudef068 小时前
基于HTML的Word风格编辑器实现:从零打造功能完备的富文本编辑器
编辑器·html·word
珹洺9 小时前
MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统
java·数据库·ide·intellij-idea·mybatis
i1yo_kiki9 小时前
idea部署本地仓库和连接放送远程仓库
java·ide·intellij-idea
朝阳3910 小时前
MD编辑器推荐【Obsidian】含下载安装和实用教程
编辑器