【发布时间】:2019-12-12 21:54:08
【问题描述】:
所以我在 node.js 中构建了一个脚本,它应该获取 csv 文件,解析它们并将它们输入 DB。 有时,当我调试我的代码时,它会像在 async_hooks.js 文件中找到的不可见断点一样停止,位于“emitHookFactory”函数的第一行(第 163 行)。
调用堆栈在同一文件上仅声明一个调用-“emitBeforeNative”。
我在试验中注意到了一些事情:
我有 3 种类型的文件需要解析并放入数据库。它仅发生在其中一种文件类型上,该文件类型非常大(csv 上 3.1m~ 行,而其他有 50~200K 行)。我尝试部分加载它——只加载开始的 20K 行(将它们复制到一个新文件,代码没有变化)并且它没有中断。这意味着大小与调试器停止有关?
我尝试用其他方式重现它,但没有成功。此外,它并不总是发生(即使在同一个文件上运行)- 但有 80-85% 的时间发生。
我的脚本如下所示:查询 DB 和 AWS 以查找新文件 > 将文件下载到本地 > 从本地流式传输文件 > 在
line事件解析行并执行数据操作 > 在end事件 - 遍历所有操作数据,构建查询并查询数据库以插入它。我在关键位置放置了几个断点,发现断点似乎发生在发出line事件的中间某处。回调函数是普通函数,不是异步的,内部没有异步操作。实际上,内部只有数组和字符串操作操作——甚至没有 3rd 方操作或任何异常操作。我试图在互联网上寻找解决方案。没有找到任何明确的方法来完全摆脱它,只有我不太了解的解决方法(对 JS 环境来说有点新,所以我无法理解如何禁用或忽略它......)
感谢您的帮助。
【问题讨论】:
-
VS 代码在 CALL STACK 视图的标题中显示了中断调试的“原因”。你的情况是怎么说的?
-
我发现这个错误报告在同一位置 github.com/shd101wyy/mume/issues/70 中断。一位评论者说“一个难以追踪的承诺中的一些例外”。你在任何地方都使用基于 Promise 的 API 吗?您是否正确处理错误?您是否在 VS Code 的 BREAKPOINTS 视图中检查了 Caught 或 Uncaught Exceptions?如果您切换这些设置会有所不同吗?
-
@AndreWein 很抱歉回答迟了,我花了一些时间才让我的数据库再次免费进行测试。它简单地说:“在调试器语句上暂停”......上帝知道这意味着什么。我正在使用基于承诺的 API,并且标记了“所有异常”和“未捕获的异常”。它没有任何区别,因为代码不会崩溃。它就像那里有一个断点一样停止了,当我按 f5 时它照常继续(除非我等待太久并且我的数据库连接超时,但代码在“BP”上停止并且无法执行我的 handleDisconnection 方法所以它压碎了)。
-
“在调试器语句上暂停”表示 node.js 运行时认为它在文字“调试器”上停止;代码中的声明。
-
@AndreWein 还有更多想法吗?这个错误仍然让我烦恼,我无法摆脱它......我的脚本运行了 3.5 小时,每次我想进行检查运行时,我都必须在它旁边坐 40 分钟,这样我才能按下f5 当它卡住并让它继续