13

在今年的 MSBuild 会议和 Terminal 1.x、winget 和其他附加功能的发布之后,我想在需要购买新笔记本电脑(Surface Book 3 或 MacBook Pro ...... )。

问题

使用 WSL2 和 Visual Studio Code 在 Windows 10 上的 Chrome 中调试 Web 应用程序时,断点不起作用。运行调试会话时,会显示消息Breakpoint set but not yet bound

在 MacOS 上调试时,完全相同的应用程序可以完美运行。

我的设置

MacBook Pro 运行最新版本的 MacOS,并在 BootCamp 下安装了 Windows 10 Pro。

Windows 10 具有运行 Ubuntu 20.04 的 WSL2。终端 1.x 已安装并用于访问 Linux 命令行。

code .Visual Studio Code 是最新的 1.45.1 稳定版本,包括 Windows 10 上的 WSL 远程开发扩展 (0.44.2)。VSCode 通过在项目目录中运行从 WSL2 中启动。

Chrome 扩展的调试器是 4.12.8

应用程序

该应用程序是一个默认的 Create React 应用程序,仅对分配断点进行了少量更改。

我首先运行:

npx create-react-app sandbox

然后我简化src/App.js并添加了一些任意变量和分配以用作断点测试。

App.js文件内容。

import React from 'react';
import './styles/main.css';

function App() {
  const test = true;
  let temp = 9;
  temp = 10;
  return (
    <div>
      <h1>Breakpoint test</h1>
      <p>Did it work?</p>
    </div>
  );
}

export default App;

我在constlet创建行以及重新分配temp.

我的launch.json内容由Create React App editor setup documentation推荐。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}/src",
      "sourceMapPathOverrides": {
        "webpack:///src/*": "${webRoot}/*"
      }
    }
  ]
}

Win10 - 运行调试会话时会发生什么?

我运行 Create React App 使用npm run start,当我运行 Launch Chrome 调试配置时,它会按预期自动打开 Chrome。

不幸的是,断点被忽略,在 Visual Studio Code 中,断点显示为未填充的圆圈。给出的消息是Breakpoint set but not yet bound

MacOS - 运行调试会话时会发生什么?

Chrome 打开,控制权转移回 Visual Studio Code,并显示断点信息(例如变量数据、调用堆栈等)。

Win10 - 火狐的作品

有趣的一点,但 Firefox 调试有效。在运行 Firefox 调试会话时,我确实必须在断点触发之前刷新初始页面加载。

断点最初显示错误Unverified Breakpoint。单击它会提示向导将一个添加pathMappings到我的配置中。

Windows 10 上使用的 Firefoxlaunch.json配置是:

    {
      "name": "Launch Firefox",
      "type": "firefox",
      "request": "launch",
      "reAttach": true,
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}/src",
      "pathMappings": [
          {
             "url": "http://localhost:3000/home/rando/dev/sandbox/src",
             "path": "${workspaceFolder}/src"
          }
      ]
    }

请注意,这/home/rando/dev/sandbox/src是应用程序在 WSL2 Ubuntu 中的位置。MacOS Firefox 设置相同,但没有pathMappings.

结论

在这个阶段,我只能得出结论,尽管Visual Studio Code WSL 文档暗示不需要额外的更改,但路径映射需要以不同方式设置。

帮助我,StackOverflow。你是我唯一的希望。

4

4 回答 4

4

我刚遇到这个,我想我已经为自己工作了。使用 的.script命令Debugger for Chrome extension,我看到了以下输出。

› http://localhost:3000/static/js/0.chunk.js (/__vscode-remote-uri__/home/user/projects/TachiWeb-React/src/static/js/0.chunk.js)
    - /home/user/projects/TachiWeb-React/node_modules/@babel/runtime-corejs2/core-js/date/now.js (/home/user/projects/TachiWeb-React/node_modules/@babel/runtime-corejs2/core-js/date/now.js)

似乎它不会将您的 webroot 附加到推断的本地路径。但是${webRoot}/*由于某种原因,使用也不起作用。这样做会导致您的路径重复两次,如下面的结果。

/__vscode-remote-uri__/home/user/projects/TachiWeb-React/src/home/user/projects/TachiWeb-React/node_modules/@babel/runtime-corejs2/core-js/date/now.js

但是手动写出"/__vscode-remote-uri__/*"似乎可以解决上述重复路径问题。

这是我的工作配置launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "WSL Chrome",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}/src",
      "sourceMapPathOverrides": {
        "/*": "/__vscode-remote-uri__/*"
      }
    }
  ]
}

于 2020-06-05T03:33:31.143 回答
1

升级到 WSL2 后,我的调试器(仅使用附加)停止工作。

我在 VS Code 上使用“远程 WSL”功能连接到我的$wsl/Ubuntu/project-path-here+ Edge(好的)+ 最新的 VS Code + Win 10 机器,所有更新(稳定)

检查.scriptsvscode 调试控制台显示我的路径仍然很奇怪,不重复,但仍然很奇怪。

1 - 使用“经典”配置(过去工作得很好):

"name": "Attach to Edge",
"type": "edge",
"request": "attach",
"port": 9222,
"url": "http://localhost:4300/*",
"webRoot": "${workspaceFolder}"

结果是:

webpack:///./src/app/component-one/component-one.component.html (\home\my-username\employer-folder\mono-repo\actual-project\src\app\component-one\component-one.component.html)

2 - 使用这篇文章的第一个答案(也来自https://github.com/microsoft/vscode-remote-release/issues/2068https://github.com/microsoft/vscode-chrome-debug/issues/ 899 ):

"name": "Attach to Edge",
"type": "edge",
"request": "attach",
"port": 9222,
"url": "http://localhost:4300/*",
"webRoot": "${workspaceFolder}",
"sourceMapPathOverrides": {
   "/*": "/__vscode-remote-uri__/*"
}

导致这个(使用 c: 用法看起来不正确):

webpack:///./src/app/component-one/component-one.component.html (c:\home\my-username\employer-folder\mono-repo\actual-project\webpack:\src\app\component-one\component-one.component.html)

在这一点上,我已经尝试了 launch.json 中的每一个组合,甚至尝试混合$wsl/Ubuntu以获得完整正确的路径(选中.scripts)并且断点始终被禁用。

此外,当我按下附件时,它的速度非常快......过去需要一段时间(可能检查/使用源地图)。

最终做了以下事情(想看看是否会发生同样的事情):

  • 添加--start-debugger-server到我的 Firefox 开发者启动配置中

  • 更新launch.json了 FF 的新附加配置(还安装了 Firefox 扩展的调试器):

"name": "Attach to Firefox",
"type": "firefox",
"request": "attach",
"url": "http://localhost:4300/*",
"webRoot": "${workspaceFolder}",

BINGO,首先尝试......没有额外的路径配置或任何东西,它应该是这样的方式以及它在我的 WSL 升级之前的方式(加上不需要端口属性)。

PS:我将检查我的另一台安装了干净的 Windows 10 2004 + WSL2 的电脑,我认为这可能是“现有/正在运行的 wsl1 + 升级到 wsl2”的事情。

于 2020-07-22T20:34:03.147 回答
0

对于大多数人来说,我正在寻找的问题是在 Chrome 或其他浏览器上反映的源映射路径与 vscode 识别的源映射路径之间存在差异。在Chrome运行(wsl上的 npm start )上对我有用的配置如下:

我的特殊解决方案:

.vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Chrome",
            "request": "launch",
            "type": "pwa-chrome",
            "url": "http://localhost:3000",
            "webRoot": "${workspaceFolder}",
            "sourceMapPathOverrides": {
                "\\mnt\\c\\*": "C:/*"
            }
        }
    ]
}

问题是:如何调试源路径如何转换为 Chrome?

这是一个简单的方法:

  1. 使用以下命令启动开发服务器: npm start
  2. 使用标准配置以调试模式(F5)启动 Chrome(无需包含 sourceMapPathOverrides)
  3. 转到 Chrome 开发者控制台 => 来源,
  4. 找到您的文件(例如 App.js)并在那里设置断点。

在此处输入图像描述

  1. 刷新页面,进入 vscode。

在此处输入图像描述

  1. 在文档的同一位置、出现的新文件(在我的情况下为 /mnt/e/)和您的文件中设置断点。

在此处输入图像描述

您会想到必须在 sourceMapPathOverrides 中将“\mnt\e”...替换为“E:/”。

于 2021-08-22T00:21:51.480 回答
-1

当我放弃尝试使用 Microsoft Edge 时,问题就消失了。继续安装 Chrome,创建一个启动配置,它工作。

于 2021-07-01T22:17:06.647 回答