vscode 连接到Live Share会话导致工作区信任子系统中的空指针异常(NPE)

fdbelqdn  于 7个月前  发布在  Vscode
关注(0)|答案(1)|浏览(53)

当所有扩展都被禁用时,这个问题是否会发生?:是的(除了Live Share)

  • 版本:1.85.0
  • 提交:af28b32
  • 日期:2023-12-06T17:43:36.790Z(6天前)
  • 浏览器:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
  • Live Share:v1.0.5900

重现步骤:

  1. Live Share:登录
  2. 尝试连接到一个Live Share会话(点击加入,登录,然后粘贴邀请链接)
  3. 窗口重新加载,开始打开实时共享工作区,呈现一个工作区信任模态,要求我信任/tmp/vsliveshare-workspace-tmp-<stuff>/Visual Studio Live Share (Workspace)。点击“是,我信任作者”。VS Code记录异常并停止打开工作区。 <-- 这里就是问题所在,我本以为它会打开工作区并连接
  4. 使用开发者:重新加载窗口
  5. 在重新加载后,我们进入受限模式,顶部有一个横幅“受限模式旨在安全浏览代码...”。点击管理,然后信任。这次没有异常。
  6. 再重新加载一次,现在我们能够连接。
    这是异常信息:
ERR Cannot read properties of undefined (reading 'scheme'): TypeError: Cannot read properties of undefined (reading 'scheme')
    at h.P (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:2605:167197)
    at .../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:2605:171789
    at Array.map (<anonymous>)
    at h.setUrisTrust (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:2605:171777)
    at h.setWorkspaceTrust (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:2605:171570)
    at m.completeWorkspaceTrustRequest (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:2605:173655)
    at Object.run (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:2690:68778)
    at c.f (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:633:42862)
    at c.prompt (.../stable-af28b32d7e553898b2a91af498b1fb666fdebe0c/static/out/vs/workbench/workbench.web.main.js:766:23881)

看起来这里的uris中的一个是undefined:
vscode/src/vs/workbench/services/workspaces/common/workspaceTrust.ts
第620行 in af28b32
| this.doSetUrisTrust(awaitPromise.all(uris.map(uri=>this.getCanonicalUri(uri))),trusted); |
也许这运行得太早了,或者在工作区的文件夹完全初始化之前?
我觉得我以前见过其他情况,如果我点击得太快,我需要多次信任一个工作区才能成功。但这是最可重复的。你只需要做的就是在托管实时共享协作会话的窗口中停止它,然后启动一个新的窗口 - 这将为你加入的协作者提供一个全新的(未受信任的)工作区。这使得测试变得非常容易。

fdx2calv

fdx2calv1#

@sbatten, 我知道你在实施工作区信任时一直在查看Live Share,请你看一下这个。

相关问题