2013-07-03 98 views
1

我有一組Node.js C++插件。他們自己完美地工作,我可以調用他們的功能,所以一切都正確聯繫。當我添加調用我所需要的外部庫(訪問數據庫)一切工作正常:我的代碼在C++中獨佔工作,但相同的代碼不會在Node.js中工作

  • 節點發現和編譯外部類
  • 我得到連接錯誤如果DB配置數據是錯誤的。

但是,如果連接數據是正確的,那麼它將做一個沒有解釋的核心轉儲。我已盡最大努力去get any data from the core dump但我什麼都沒有。

如果我使用相同的代碼並將其編譯並以C++的方式獨立運行。所以我知道:

  • 連接數據是正確的
  • 的圖書館工作,並連接到數據庫(我得到行回)

所以我的結論是:有一些是關於在運行導致此代碼中斷的Node.js環境。

如果有人有更多的Node.js經驗,並對如何做或可能發生什麼提出建議,我將不勝感激。

+0

核心轉儲*是*解釋。 – Pointy

+0

無論如何,我可以獲得更多有關錯誤的信息嗎? – Alex

+1

你可以用'gdb'或者別的東西從核心轉儲看堆棧跟蹤。確保您正在使用調試符號進行構建。 – Pointy

回答

0

這是一個瘋狂的猜測,因爲沒有提供代碼,但有可能是在另一個線程(不同於主)執行V8代碼?

例如,在調用node/v8函數的成功連接時調用了一些回調函數(我假設您提到的那些外部庫啓動自己的線程來完成它們的工作)。

如果是這樣的話,問題是node/v8代碼只能從主線程調用。那些所謂的線程可能是有用的:

至於調試,除了從檢查覈心,你也可以用gdb運行你的代碼,所以你可以在一些有趣的設置斷點地方。

$ gdb node 
(gdb) run test_connection.js 

(gdb) start test_connection.js 
(gdb) break <some interesting place> 
(gdb) cont 

GDB run and start info

即使您沒有設置斷點,當它崩潰,你就可以檢查堆棧跟蹤,看看發生了什麼事情的不同線程。

當然,正如其他人所建議的,一切都應該使用調試符號構建。

相關問題