缓冲区javascript代码中的节点js SEGFULT

缓冲区javascript代码中的节点js SEGFULT,javascript,c++,c,node.js,buffer,Javascript,C++,C,Node.js,Buffer,在处理节点扩展中的大量数据包时,我的节点应用程序几乎是随机崩溃的。当我在gdb(使用调试符号编译的节点)中打开丢弃的核心文件时,我得到的是: Program terminated with signal 11, Segmentation fault. #0 0x5e02190a in ?? () (gdb) bt #0 0x5e02190a in ?? () #1 0x5e01316a in ?? () #2 0x08210303 in v8::internal::Invoke(bool

在处理节点扩展中的大量数据包时,我的节点应用程序几乎是随机崩溃的。当我在gdb(使用调试符号编译的节点)中打开丢弃的核心文件时,我得到的是:

Program terminated with signal 11, Segmentation fault.
#0  0x5e02190a in ?? ()
(gdb) bt
#0  0x5e02190a in ?? ()
#1  0x5e01316a in ?? ()
#2  0x08210303 in v8::internal::Invoke(bool, v8::internal::Handle<v8::internal::JSFunction>,     v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, bool*) ()
#3  0x0821062f in v8::internal::Execution::New(v8::internal::Handle<v8::internal::JSFunction>, int, v8::internal::Handle<v8::internal::Object>*, bool*) ()
#4  0x081bfadd in v8::Function::NewInstance(int, v8::Handle<v8::Value>*) const ()
...
程序以信号11终止,分段故障。
#0 0x5e02190a英寸??()
(gdb)英国电信
#0 0x5e02190a英寸??()
#1 0x5e01316a英寸??()
#v8::internal::Invoke中的2 0x08210303(bool,v8::internal::Handle,v8::internal::Handle,int,v8::internal::Handle*,bool*)()
#v8::internal::Execution::New(v8::internal::Handle,int,v8::internal::Handle*,bool*)中的3 0x0821062f
#v8::Function::NewInstance(int,v8::Handle*)常量()中的4 0x081bfadd
...
查看我的C数据包处理扩展的源代码,NewInstance实际上是对节点缓冲区构造函数的调用。下面是有问题的代码片段(数据包是一个常规的c数据结构):

。。。
v8::Local bufferConstructor=v8::Local::Cast(globalObj->Get(v8::String::New(“Buffer”));
v8::Handle构造函数args[3]={slowBuf->Handle,v8::Integer::New(packet->packet->dataLength),v8::Integer::New(0)};
v8::Local actualBuffer=bufferConstructor->NewInstance(3,constructorArgs);
如果我理解正确的话,缓冲区源代码实际上是纯JS的

找出JS代码到底在哪里崩溃的策略是什么?为什么


代码稳定运行了好几天,在C级别处理数千个数据包,并将它们转换为节点缓冲区对象,它总是以相同的签名不时崩溃,我想了解为什么…

您使用的是哪个版本的
node
?不熟悉像这样向
缓冲区
构造函数传递3个参数。也就是说,segfaults是危险的,所以也有可能其他地方的代码正在破坏某些东西,使其稍后崩溃。
...
v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(v8::String::New("Buffer")));
v8::Handle<v8::Value> constructorArgs[3] = { slowBuf->handle_, v8::Integer::New(packet->packet->dataLength), v8::Integer::New(0) };
v8::Local<v8::Object> actualBuffer = bufferConstructor->NewInstance(3, constructorArgs);