【问题标题】:Better way to debug JS with generators in IntelliJ or WebStorm在 IntelliJ 或 WebStorm 中使用生成器调试 JS 的更好方法
【发布时间】:2015-12-02 07:11:02
【问题描述】:

我正在使用 Koa 框架在 Node JS 中开发一个 webapp。

所有的流控制都是通过生成器完成的,而不是回调。代码看起来是连续的,但实际流程不是。无论如何,它看起来比回调地狱要干净得多。

这是一个用 koa 编写的控制器函数的简单示例:

function *findUserById(userId)
{
    var user = yield getUserOrError404(userId);
    yield loadAdditionalData(user);
    yield data.users.save(user);
    return user;
}

但是有一个困难:在我的 IDE (IntelliJ IDEA) 中使用 yields 单步执行代码效果不佳。一旦执行与yield 语句一致,如果我只是“跳过”,则执行流程会向上堆栈到 koa 代码(这并不是 IDE 的错,因为它只是遵循实际的执行流程生成器、yield 语句和 Node 事件循环)。

目前我必须为下一条我希望调试器暂停的语句设置断点,通常是下一行,然后单击“恢复程序”按钮。

当有超过 2-3 个 yield 语句时,它会变得乏味。

是否有更好的方法(技巧、插件、...)来单步执行大量生成器的 JS 代码,允许单步执行 yield 语句,就好像它是“正常”的顺序语句一样?

【问题讨论】:

    标签: javascript node.js debugging intellij-idea generator


    【解决方案1】:

    听起来像 Run To Cursor 命令的工作 - 它像轻量级断点一样有效地运行,在执行到光标当前所在的行后被删除。

    请参阅this gist 获取可用于此的按钮的屏幕截图,以及我用来检查其是否有效的测试工具文件(它有效;至少在 PhpStorm 中,所以我希望 WebStorm 的功能相同就 JS 而言)。

    编辑:它在 IntelliJ 中也能很好地工作。除了屏幕截图中显示的按钮外,您还可以通过右键单击该行然后单击上下文菜单中的“运行到光标”来触发它。或 [alt]+[F9] 键盘快捷键。

    【讨论】:

    • 这已经是对断点方法的巨大改进。谢谢 !我希望有一种更先进的“仿真”方法可以透明地跨过生成器调用。我等一下,也许有人能想出这样的魔法……否则我会接受这个答案。
    • 哦,对常规调试会话也很有用;)
    • 我会接受你的回答,直到,也许,希望有一天,像 IntelliJ 这样的工具有一个“生成器感知”调试模式,允许透明地跨过 yield 语句。
    • 这不是更多的“步入”命令吗? ;) 说真的,我们可以在Jetbrains Issue Tracker 处添加一个功能请求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2017-11-27
    • 2012-05-04
    • 2015-10-04
    相关资源
    最近更新 更多