如何调试node.js应用程序?

如何调试node.js应用程序?,node.js,Node.js,我正在开发一个node.js应用程序,有时它似乎会冻结。我假设这是因为用户代码线程已冻结。这似乎发生在使用约5分钟后,但我不知道为什么。有没有什么工具可以让你知道它在哪里陷入僵局?除了在每一行添加日志记录之外 已更新以添加更多信息 我添加了一些跟踪语句,并将其缩减为以下代码: exports.addLocationToRoute = function(req, res) { console.log("27"); console.log(req.body); var qu

我正在开发一个node.js应用程序,有时它似乎会冻结。我假设这是因为用户代码线程已冻结。这似乎发生在使用约5分钟后,但我不知道为什么。有没有什么工具可以让你知道它在哪里陷入僵局?除了在每一行添加日志记录之外

已更新以添加更多信息

我添加了一些跟踪语句,并将其缩减为以下代码:

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) {

我正在使用JetBrains WebStorm IDE进行Javascript开发。它完全支持节点,这意味着您可以设置断点并跟踪代码。然而,WebStorm并不是免费的。 您还可以查看有关节点调试的旧主题:


关于使用,有一个公认的答案,但我宁愿遵循更流行的答案的调试使用方式。

您可能希望将节点置于
--debug
模式,并使用进行分析


当代码锁定在某个位置时,您可以使用“暂停”按钮()暂停执行,并检查堆栈跟踪以查找锁定。

可能的重复项不是重复项。我特别想问的是如何在代码中找到它的死锁位置。这就像是另一个问题。我已经设置好了,但是你如何使用它来找到它的死锁位置?我不想添加断点,因为它每5-10分钟只发生一次。单步执行代码需要几个小时才能复制。请告诉它在出现异常时暂停。但是,根据您的更新,底层的PostgreSQL server似乎拒绝了您的连接(一次拒绝的连接太多了?),为什么要在每个查询上打开新的连接,不要反复重复使用同一个连接?当然,每个请求必须有一个连接,否则可能会有两个请求同时使用同一个连接?请参阅。创建查询并获取查询对象,然后对传入的结果执行回调。具有多个查询的单个连接(按照提供给PSQL的顺序排队)。这比用关闭和打开连接来重击PSQL要好得多,因为这些连接只会给服务器带来压力,并且可能会在同时打开和关闭的连接数量上遇到错误(就像我怀疑你在这里遇到的)。嗯,我不同意你的看法,但是文档中说,回调样式比事件apiAny更受欢迎,任何JetBrains IDE都应该有Node.js插件。。我使用IntelliJ,它也是这样做的。一旦它冻结,你能用它暂停一下,找出它在调用堆栈中的位置吗?这不适用于chrome开发工具,您可以暂停,但不确定调用堆栈。如果没有要调用的回调,暂停不会导致任何结果@皮梅尔:是的,这个主意也不错,但成本更高。