【问题标题】:HandleOKCallback crash处理OKCallback 崩溃
【发布时间】:2019-01-19 05:17:03
【问题描述】:

您好,当我在 argv[1] 上执行检查时,下面的代码会崩溃。请帮助 修复它,在将值分配给 argv[1] 时,我需要检查 bool 变量 checktrue 是否为 true 分配字符串值,否则按以下代码分配 int 值。

void DispatchEventWorker::HandleOKCallback() {
  v8::Local<v8::Value> argv[2];
    argv[0]= Nan::New<v8::String>(structdata.value1).ToLocalChecked();

if(checktrue)
     {
             argv[1] = Nan::New<v8::Number>(structdata.value2).ToLocalChecked();

     }
else
 {
          argv[1] = Nan::New<v8::String>(structdata.value3);
 }
  callback->Call(2, argv);
}

注意输出:进程 123432098(节点)终止 SIGSEGV 代码=1 fltno=11 ip=0000000001076a08(/usr/lib/ldqnx-64.so.2@memcpy+0x0000000000000048) mapaddr=0000000000076a08 .参考=2073696874206f74

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。我们很乐意为您提供帮助,但首先您需要付出一些努力。尝试先自己解决此问题,然后编辑此帖子以增加您的努力。如果您设法自己解决此问题,请不要忘记发布解决方案的答案,以使我们其他人受益。
  • 出现了一些拼写错误。今天是我在 node js 的第一天
  • (1) 格式化代码以提高可读性会很好。 (2)代码与你的描述不符(关于在什么情况下返回什么),哪一个是对的? (3) 你有两个分配给argv[1],哪个是崩溃的? (4) 要使用 C++,您应该熟悉调试器。这不会是您遇到的最后一个 SIGSEGV ;-)

标签: c++ v8 node.js-nan


【解决方案1】:

首先,我建议您在回调 JS 时始终包含 async_resource,否则某些 Node.js 功能将不起作用:

this->callback->Call(2, argv, this->async_resource);

那么,您的代码在argv[1] 上缺少.ToLocalChecked(),并且无法以其当前形式编译。

否则它根本没有任何问题,而且很可能崩溃与 Node.js 无关 - 也许其中一个值是空指针。

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多