当所有扩展都被禁用时,这个问题是否会发生?:否
版本:1.60.0(用户设置)
提交:e7d7e9a
日期:2021-09-01T10:41:52.311Z
Electron:13.1.8
Chrome:91.0.4472.164
Node.js:14.16.0
V8:9.1.269.39-electron.0
OS:Windows_NT x64 10.0.18363
重现步骤:
- Live Share主机启动协作会话
- Live Share访客加入会话
- Live Share访客尝试发起调试
你好@isidorn:已经有很多类似的问题被关闭了。我看到你回复说将调试适配器的受支持调试器“语言”添加到package.json中可以解决the issue。
然而,Live Share访客的调试适配器应该支持主机可以调试的所有语言。因此,我们需要添加每种可能的语言,以便将调试请求转发给主机。但是,如果访客在launch.json文件中,他们会看到这个:
是否有针对所有语言的通配符选项,或者有办法禁用Live Share访客的这个新限制吗?
7条答案
按热度按时间lrpiutwd1#
我看到实时共享是一个特殊情况,因为即使没有
launch.json
,客人也可以启动任何调试会话。为
languages
设置通配符可能过于宽泛,因为它可能会有其他影响。我认为我们已经特别对待实时共享,因为它有一个
type
的*
。我建议简单地利用这个标志。因此,如果调试器有一个
*
作为type
,对话框不应该出现。代码指针。欢迎PRhttps://github.com/microsoft/vscode/blob/main/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts#L304
尽管最终决定留给@weinand和@roblourens,因为他们现在拥有调试功能。
zynd9foi2#
我同意Isidorn的观点,对于这个问题,一个本地修复以防止对话框出现是首选的低风险修复方法。
检查可以放在这一行
代码基本上会检查是否为调试类型
*
注册了调试器,然后返回它。现在让我们分析一下已经安装了LiveShare调试器的用户的后果:
如果用户想要调试一个他们没有安装调试器(且不存在launch.json)的文件,他们将不再看到Marketplace对话框,而是直接进入LiveShare调试器。
@jramsay 这是预期的行为吗?
还是我们应该先询问用户(通过另一个对话框)是否希望在显示Marketplace对话框之前使用LiveShare调试?这种方法的缺点是我们需要更多的LiveShare知识进入我们的代码...
jm81lzqq3#
我好奇在其他情况下,作为嘉宾,即使我没有安装Python扩展,我是否可以通过LiveShare获得Python文件的智能感知?
如果主机也没有安装调试器怎么办?
如果用户想要调试一个没有安装调试器的文件(并且不存在launch.json),他们将不再获得Marketplace对话框,而是会进入LiveShare调试器。
而且这还不是在liveshare会话中?我想避免在安装了liveshare扩展但不在liveshare会话中时影响体验的事情。
neekobn84#
抱歉延迟了!(OOF)Live Share当前在扩展的package.json中注册了两个调试器:
当Live Share嘉宾加入协作会话时,我们初始化我们的JoinDebugManager并注册一个debugConfigurationProvider:
vscode.debug.registerDebugConfigurationProvider('*', this);
这用于拦截所有可能的调试类型,但仅限于协作会话的持续时间。
如果主机在共享协作会话时执行类似的操作。
我在debugAdapterManager中调试了您提到的那一行。我不认为这会起作用,因为调试器本身的类型是'vslsJoin'。相反,我们希望只有在已注册拦截所有类型的IDebugConfigurationProvider的情况下才跳过市场对话框。这将在Live Share嘉宾实际上处于协作会话时发生。
这将涉及两个更改:
public async provideDebugConfigurations(folder: vscode.WorkspaceFolder | undefined, token?: vscode.CancellationToken): Promise<vscode.DebugConfiguration[]> {
return [];
}
当我这样做时,当Live Share嘉宾启动调试空的launch.json时,如果它不存在,则创建一个空的launch.json:
然后嘉宾必须手动编辑此launch.json以添加调试配置,然后他们才能开始调试:
ex:
这是可以接受的,但值得注意的是,以前当launch.json不存在时,它会被生成,但Live Share嘉宾不必手动添加调试配置。我记不清launch.json是否已经填写好,或者他们是否仍然能够使用空的launch.json启动调试会话-但回想一下这一步并不必要。可能不是问题,因为似乎很明显需要添加正确的配置才能开始调试。
我会为此更改发送PR。虽然我相信将'vslsJoin'类型设置起来并不是理想的选择 :)
xam8gpfp5#
有人知道这个之前是如何工作的吗?或者为什么/什么时候它会出问题?
尝试理解这个问题 - 对于我来说,客户启动一个启动配置似乎运行得很好,我没有截图中的对话框。问题只是在没有启动配置的情况下开始调试文件对吗?
ttcibm8c6#
vscode.debug.registerDebugConfigurationProvider('*', this);
This is used to intercept all possible debug types but only for the duration of the collaboration session.
I guess I'd expect this to intercept the
type: *
config and replace it with the vsls type, rather than hardcoding that into vscode which I don't really want to do, although it looks like we've done that in one place.lrl1mhuk7#
Ping,这里还有什么事要处理吗?