创建VSCode调试器扩展

时间:2017-04-05 18:41:58

标签: visual-studio-code vscode-extensions

我正在尝试编写VSCode扩展以支持基本的SNES应用程序开发。我已经有了基本的语法定义和构建任务,所以我有语法高亮,并且能够使用低音v14汇编程序使用Ctrl + Shift + B构建我的项目,但现在我想弄清楚如何启动项目使用launch.json。我已经完成了official docs并使用了模拟调试器项目,但我似乎无法弄清楚如何使其适应我的扩展。首先,我使用bsnes-plus模拟器作为我的调试器。实际上没有任何命令行或IPC接口可以实现正确的调试适配器,所以我真正想做的就是运行程序并将其输出文件传递给它。暂时,我假设bsnes-plus.exe位于我的$ PATH中,但最终我会尝试找出扩展的外部可执行依赖项的最佳实践。

以下是我目前的问题:

  • 是我的已编译应用程序的launch.json的“program”字段,还是bsnes-plus.exe?
  • 如果“program”是我的应用程序,我在哪里指定bsnes-plus.exe?反之亦然。
  • 有没有办法指定我自己的项目级变量,例如$ OUTPUT这样我就不必将输出文件名硬编码到构建任务和启动任务中了吗?
  • 有一次,我能够获得启动命令打开bsnes-plus,但没有加载游戏,当我关闭它时,VSCode抱怨调试器意外终止并立即重新打开bsnes-plus。我该如何避免这种情况?我是否需要编写一个调试适配器,即使除了启动应用程序之外它不会实际执行以外的其他任何东西,只是这样我可以告诉VSCode它是否干净地退出了?

1 个答案:

答案 0 :(得分:0)

  

launch.json的“程序”字段是我已编译的应用程序,还是bsnes-plus.exe?

这完全取决于调试扩展。它只是传递给调试适配器。它通常对应于正在调试的特定应用程序/脚本,而不是运行它的运行时环境,因此我建议它应该是您编译的应用程序。

  

如果“程序”是我的应用程序,则在哪里指定bsnes-plus.exe?反之亦然。

您可以将其放在任何其他字段中。在Dart中,我们有一个await sessionClient.detectIntent(request);字段,可以将其传递给调试适配器。不过,它通常是由dartPath静默填充的(我们通过搜索DebugConfigurationProvider.resolveDebugConfig来检测SDK),因此用户无需添加它。

  

有没有一种方法可以指定我自己的项目级变量,例如$ OUTPUT,这样我就不必将输出文件名硬编码到构建任务和启动任务中?

您无法创建自己的变量,但是使用PATH可以在将启动配置传递给调试适配器之前自行操作启动配置,这可能使您可以执行此处需要的操作(例如,您可以执行在resolveDebugConfig上进行字符串替换-或者甚至可以在未设置的情况下添加它,从而也可以进行launch.less-less的启动。)

  

我是否需要编写调试适配器,即使它除了启动应用程序之外并没有做任何其他事情,只是为了告诉VSCode它干净退出了?

我不确定在没有更多细节的情况下发生了什么,但是拥有调试适配器可能最有意义-例如,如果要使工具栏上的“停止/重新启动”按钮起作用,则可能需要调试可以终止和/或重新启动进程的适配器。