2017-10-14 139 views
0

我正在開發一個節點插件,我正面臨着一些有關分段錯誤的奇怪問題。在MyClass.cc我宣佈一個結構和NAN_METHOD如下:Nodejs原生插件奇怪的分段錯誤

struct ComputeContext { 
    int test = 1; 
}; 

NAN_METHOD(MyClass::Foo) { 
    ComputeContext ctx; 
    info.GetReturnValue().Set(Nan::New(true)); 
} 

的奇怪的事情是,當我從JavaScript調用,程序將退出,段故障此方法。但是,如果我不初始化測試,例如int test;,它不會崩潰或報告段錯誤。爲了檢測分段錯誤,我使用了segfault-handler包。

也許有人對這裏發生了什麼有線索?作爲旁註,MyClass :: Foo是一個靜態方法,不知道這是否有所作爲。

+0

您是否嘗試過調試它並檢查哪條線路導致崩潰? – VTT

+0

不幸的是,我還沒有設置調試環境。我認爲這將需要從源代碼構建v8,libuv和節點。但無論如何,segfault處理程序說它在info.GetReturnValue()。Set(Nan :: New(true));'上崩潰。事實上,這種行爲非常奇怪。 – justadudewhohacks

+0

它只需要使用調試符號構建擴展並在調試器下運行。 – VTT

回答

2

好吧,事實證明,我有另一個名爲ComputeContext的結構定義在一個不同的.cc文件中。 MSVC沒有引發任何錯誤並鏈接了這兩個文件。這在創建結構實例時導致了分段錯誤。