为什么我的gulp / teamcity构build失败,“断言失败:0,文件src \ uv-common.c,第103行”?

我的TeamCity构build随机失败,并显示以下消息:

[16:25:45][Step 1/2] [16:25:45] Build complete! [16:25:45][Step 1/2] [16:25:45] Finished 'build' after 3.32 min [16:25:45][Step 1/2] [16:25:45] Starting 'test'... [16:25:48][Step 1/2] Assertion failed: 0, file src\uv-common.c, line 103 [16:25:48][Step 1/2] Process exited with code 3 [16:25:48][Step 1/2] Step Gulp (Command Line) failed 

一些细节:

  1. 我正在使用命令行亚军:call npm install; 叫咕咕咕咕
  2. 有问题的步骤是在编译的testing二进制文件上运行NUnit。
  3. 我不能通过命令行重现问题。

环境信息:

  • TeamCity v9.0.2(最新的写作时间)
  • 节点v10.36(最新的文字)
  • gulp v3.8.10(最新的写作时间)
  • NUnit.Runners nuget包2.6.4(最新的写作时间)

正如Michael所指出的那样,这是由于libuvnetworking库。

有很多机会,你的错误来自不处理的EHOSTDOWN代码,并使你的过程失败。

joyent repo或libuv其实有一些关于这个的问题。

看来这个提交已经解决了,现在已经和0.12.1版本的Node一起生效了。

这一切说,这一切,对不对?

 Assertion failed: 0, file src\uv-common.c, line 103 Process exited with code 3 

有人为了debugging而设置了断言。 实际上,第103行包含了这个断言。 我猜测这里的零值是被testing的值。

  98 #define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name; 99 const char* uv_err_name(int err) { 100 switch (err) { 101 UV_ERRNO_MAP(UV_ERR_NAME_GEN) 102 default: 103 assert(0); // <- Here's the assertion that failed 104 return NULL; 105 } 106 } 107 #undef UV_ERR_NAME_GEN 

有一个比你的断言更高的function线。 它想要捕捉一个错误,将其映射到已知的东西上。 这个“default:”意味着它是一个未知的错误,作者不知道。 那么这个断言就是这样死的,因为他不知道如何处理它。

那么现在什么是libuv? 这是一个networking图书馆。 当调用uv_err_name(something)被调用时,这一切都取决于你在做什么。 例如,可能是getaddrinfo()调用。 底层的tcp堆栈应该返回可识别的错误数字。 显然,你的版本不能识别tcp栈返回的内容。

所以,现在我们合理地理解这个问题,我强烈build议更新与此相关的libuv库。 重复testing。 如果再次失败,请确认您已连接到以太网(如果您使用的是可以closures的Wi-Finetworking)。

Interesting Posts