2012-03-19 46 views
4

我正在研究node.js應用程序,偶爾它似乎凍結。我認爲這是因爲用戶代碼線程已凍結。這似乎發生在約5分鐘的使用後,但我不知道爲什麼。有沒有什麼工具可以讓你知道它在哪裏變得僵局?除了在每一行添加日誌。你如何調試一個node.js應用程序?

更新添加更多信息....

我已經添加了一些跟蹤語句,並已經把範圍縮小到下面的代碼:

exports.addLocationToRoute = function(req, res) { 
    console.log("27"); 
    console.log(req.body); 

    var queryConfig = { 
     text: "INSERT INTO route_locations (route_id, location_id, order_id) VALUES ($1, $2, $3);", 
     values: [req.params.id, req.body.locationId, req.body.order] 
    }; 

    pg.connect(conString, function(err, client) { 
    console.log("28"); 
... 

我看到在跟蹤27輸出,但不28.有沒有辦法看到爲什麼它在這兩點之間被凍結?

更新2:

我只是想再次重現,它已經成爲在代碼中的不同點凍結,但在這一點上還呼籲

pg.connect(conString, function(err, client) { 
+1

[如何調試node.js應用程序](http://stackoverflow.com/questions/1911015/how-to-debug-node-js-applications) – 2012-03-19 21:19:57

+2

這可能不是重複的。我具體詢問如何找到代碼中哪裏已經陷入僵局。 – dan 2012-03-19 21:28:55

+0

這就像現在一樣。 – 2012-03-19 22:05:06

回答

4

我使用JetBrains公司WebStorm IDE用於我的Javascript開發。它具有完整的Node支持,這意味着您可以設置斷點並跟蹤代碼。但是,WebStorm並不是免費的。 你也可以看在節點調試一個老話題: How do I debug Node.js applications?

有關於使用Chrome Development Tools一個公認的答案,但我寧願跟着使用node-inspector進行調試的更普遍的回答的方式。

+0

任何JetBrains IDE都應該有Node.js插件..我使用IntelliJ,它的確如此 – 2012-03-19 21:31:52

+0

所以你可以使用它暫停一旦它變得凍結以找出它在哪裏的callstack?這不適用於Chrome開發工具 – dan 2012-03-19 21:31:54

+0

是的,你可以暫停,但不知道調用堆棧。如果沒有回調被呼叫,暫停將不會引導你到任何地方。 @j pimmel:是的,Idea也很好,但它花費更多。 – 2012-03-19 21:36:30

0

您可能想要將節點放入--debug模式並使用node-inspector進行分析。

當代碼鎖定在某個位置時,可以使用暫停按鈕(http://pix.am/LYZz/)暫停執行,並檢查堆棧跟蹤以查找鎖定。

+0

我已經設置好了,但是如何使用它來找出它被鎖定的位置?我不想添加斷點,因爲它每5-10分鐘只發生一次。單步執行代碼需要幾個小時才能重現。 – dan 2012-03-19 21:28:14

+0

告訴它暫停異常,而不是。然而,基於你的更新,它看起來像是底層的PostgreSQL服務器拒絕你的連接(一次太多?)爲什麼你在每個查詢中打開新的連接,而不是重複使用同一個連接? – 2012-03-19 21:38:35

+0

當然你必須每個請求有一個連接,否則你可能有兩個請求在同一時間使用相同的連接? – dan 2012-03-19 22:57:34