2012-03-19 45 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