我可以让 nodejs --debug 标志等待远程连接吗

Posted

技术标签:

【中文标题】我可以让 nodejs --debug 标志等待远程连接吗【英文标题】:Can I make nodejs --debug flag wait for a remote connection 【发布时间】:2016-03-09 04:10:38 【问题描述】:

我想使用node --debug app.js 运行以下脚本并让节点等待远程调试会话开始。我认为app.js 脚本在调试器建立连接之前就崩溃了。我正在使用隧道将端口 5858 转发到 vagrant box,并且我知道该部分正在工作,因为我之前成功使用了完全相同的设置。

这可能吗?代码在afterCheck(err,spam)) //spam is not defined 崩溃,我想弄清楚原因。

var mysql      = require('mysql');
var connection = mysql.createConnection(
    host     : 'localhost',
    user     : 'root',
    password : '123',
    database : 'kommunity',
    debug: ['ComQueryPacket']
);

var akismet = require('akismet').client( blog: 'deleted', apiKey: 'deleted' );

var selectPosts = "SELECT p.id as id, poster_ip, message, p.poster FROM topics  t\
                  LEFT JOIN posts p on t.first_post_id = p.id WHERE poster_ip != ''";

//var spam = false;

akismet.verifyKey(function(err, verified) 
    if(err) throw err;
    if (verified) 

        console.log('API key successfully verified.');
        connection.connect();

        connection.query(selectPosts, function(err, rows, fields) 
            if (err) throw err;
            var count = 0;
            rows.forEach( function(entry) 

            //console.log('foreach called with count '+count);
                count++;
                //console.log(entry['id']);

                akismet.checkSpam(
                    user_ip: entry['poster_ip'],
                    comment_author: entry['poster'],
                    comment_content: entry['message']

                    , afterCheck(err,spam))

                );
        );

    

    else 

        console.log('Unable to verify API key.');
    

);

var afterDelete = function (err, rows, fields) 

    if (err) throw err;
    console.log('deleted topic '+rows[0]);
    console.log('spam');
    connection.end();



var afterCheck = function(err, spam, entry) 

    if(err) throw err;

console.log('after check called and spam is :'+spam);
    var deleteQuery = "DELETE FROM topics , posts  USING topics INNER JOIN posts \
                       WHERE topics.id=posts.topic_id AND topics.id ="
    if(spam) 
        console.log('spam');
        console.log('entry is ' + entry);
        connection.query(deleteQuery + entry.id + ';', afterDelete(err, rows, fields) );
        connection.end();

     else 

        console.log('Not spam');

    

【问题讨论】:

【参考方案1】:

来自 Webstorm Run/Debug Help。我知道是因为在 Webstorm 中调试我的 nodejs 应用程序。

使用 --debug-brk 选项,应用程序的执行暂停 发射后。此选项允许您调试执行的代码 开始时。

使用 --debug 选项,必须在 应用程序启动被执行,应用程序等待 连接到它的调试器。此选项在您不使用时很有用 现在要调试 Node.js,但您想稍后调试它。

2020 年 5 月更新

对于 node 和 npm 版本 --node 10.16.0 --npm 6.9.0,--debug-brk 选项会给出弃用警告。

(node:1601) [DEP0062] DeprecationWarning: `node --debug` and `node --debug-brk` are invalid. Please use `node --inspect` or `node --inspect-brk` instead.

为此,我们应该使用 --inspect 和 --inspect-brk。

【讨论】:

谢谢。我正在使用 phpStorm,所以过程应该是一样的。但是,我正在进行远程调试,所以我在服务器上运行--debug,而不是运行 PHPStorm 的客户端。我在服务器上尝试了--debug-brk,但它似乎并没有在我的断点处停止。 更新节点 10.16.0: 这些选项被重命名为 --inspect--inspect-brk 这是来自节点的完整消息:“node --debugnode --debug-brk 是无效。请改用node --inspectnode --inspect-brk。"

以上是关于我可以让 nodejs --debug 标志等待远程连接吗的主要内容,如果未能解决你的问题,请参考以下文章

使用 DEBUG 标志打开进程的问题

等待每个 for 循环迭代完成,然后在 nodejs 中开始下一个

在线程中等待标志的最佳方法

《汇编语言(第三版)》pushf 和 popf 指令,以及标志寄存器在 Debug 中的表示

Puppeteer + Nodejs 通用全屏网页截图方案常用参数实现

如何通过 npm run-script 将标志传递给 nodejs 应用程序?