VS Code: “Breakpoint ignored because generated code not found” error

前端 未结 18 2585
无人共我
无人共我 2020-12-13 08:07

I have looked everywhere and I still have issue debugging TypeScript inside VS Code. I have read this thread but still I am not able to hit my breakpoints placed inside a Ty

相关标签:
18条回答
  • 2020-12-13 08:26

    Update: TypeScript debugging is now added in 0.3.0 Update: Always clear your breakpoints, then attach, then add breakpoints. This is a bug and has been reported.

    0 讨论(0)
  • 2020-12-13 08:31

    After a lot of time wasted on resolving this issue, it turned out the best way is to turn on debugging trace by adding the following line in launch.json.

    "trace": true
    

    And see where the problem actually is. Your debug console will output something in the lines of:

    Verbose logs are written to: /Users/whatever/Library/Application Support/Code/logs/blah/blah/debugadapter.txt
    

    Among a lot of other stuff, your console will have lines like these:

    SourceMap: mapping webpack:///./src/index.ts => C:\Some\Path\index.ts, via sourceMapPathOverrides entry - "webpack:///./*": "C:/Some/Path/*"
    

    Use sourceMapPathOverride to fix it to actually match your path. The property "trace" used to be called "diagnosticLogging" which is no longer used.

    0 讨论(0)
  • 2020-12-13 08:32

    Setting "outFiles" : ["${workspaceRoot}/compiled/**/*.js"] solved the issue for me.

    "outFiles" value should match one set in tsconfig.json for outDir and mapRoot which is ${workspaceRoot} in your case, so try "outFiles": "${workspaceRoot}/**/*.js"

    Here are my tsconfig.json

    {
        "compilerOptions": {
            "module": "commonjs",
            "noImplicitAny": true,
            "removeComments": true,
            "preserveConstEnums": true,
            "sourceMap": true,
            "target": "es6",
            "outFiles": ["${workspaceRoot}/compiled/**/*.js"],
            "mapRoot": "compiled"
        },
        "include": [
            "app/**/*",
            "typings/index.d.ts"
        ],
        "exclude": [
            "node_modules",
            "**/*.spec.ts"
        ]
    }
    


    and launch.json

    {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "node",
                "request": "launch",
                "name": "Launch Program",
                "program": "${workspaceRoot}/compiled/app.js",
                "cwd": "${workspaceRoot}",
                "outDir": "${workspaceRoot}/compiled",
                "sourceMaps": true
            }
        ]
    }
    

    Here is small project, where you may see all parameters set https://github.com/v-andrew/ts-template

    0 讨论(0)
  • 2020-12-13 08:32

    I changed my config in launch.json for:

    { "name": "Debug tests in Chrome", "type": "chrome", "request": "attach", "port": 9222, "sourceMaps": true, "sourceMapPathOverrides": { "*": "${webRoot}/*" }, "webRoot": "${workspaceRoot}" }

    before was:

    { "name": "Debug tests in Chrome", "type": "chrome", "request": "attach", "port": 9222, "sourceMaps": true, "webRoot": "${workspaceRoot}" }

    Include '"sourceMapPathOverrides"' was my solution

    0 讨论(0)
  • 2020-12-13 08:34

    I just had to restart my express server and then reattach the debugger.

    0 讨论(0)
  • 2020-12-13 08:35

    I would like to contribute to spare some hours of head banging.

    I used Debugger for Chrome for VS code (you don't need this for webstorm), I would recommend spend 10min reading their page, it will enlighten your world.

    After installing the debugger extension, make sure that source-map is installed, in my case I also needed source-map-loader. Check your package.json for that.

    My launch.json which is the chrome debugger configuration (all my source files where under src) :

    {
      // Use IntelliSense to learn about possible attributes.
      // Hover to view descriptions of existing attributes.
      // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
      "version": "0.2.0",
      "configurations": [{
          "type": "chrome",
          "request": "attach",
          "name": "Attach to Chrome",
          "port": 9222,
          "webRoot": "${workspaceRoot}/src"
        },
        {
          "type": "chrome",
          "request": "launch",
          "name": "Launch Chrome against localhost",
          "url": "http://localhost:8080",
          "webRoot": "${workspaceRoot}/",
          "sourceMapPathOverrides": {
            "webpack:///./*": "${webRoot}/*"
          }
        }
      ]
    }

    Add devtool: 'source-map' to your webpack.config.js. Other parameters that generates mapping inlines won't work with Chrome Debugger (they mention that on their page).

    This is an example:

    module.exports = {
      entry: "./src/index.js",
      output: {
        path: path.resolve(__dirname, "build"),
        filename: "bundle.js"
      },
      plugins: [
        new HtmlWebpackPlugin({
          title: "Tutorial",
          inject: "body",
          template: "src/html/index.html",
          filename: "index.html"
        }),
        new DashboardPlugin()
      ],
      devtool: 'source-map',  
      module: {
        loaders: [
          {
            test: /\.css$/,
            loader: "style-loader!css-loader"
          },
          {
            test: /\.js?$/,
            exclude: /(node_modules|bower_components)/,
            loader: "babel-loader",
            query: {
              presets: ["es2017", "react"],
              plugins: ['react-html-attrs']          
            }
          }
        ]
      },
      watch: true
    };

    Then you run your webpack: `webpack-dev-server --devtool source-map --progress --port 8080, I used webpack-dev-server but it has same options as webpack.

    When you do that you must see a .map file of your generated app. If not then come back and verify your setup.

    Now in VS Code switch to Debug Console and run .scripts. This is a very useful command because it shows you what generated code is mapped to which source.

    Something like this: - webpack:///./src/stores/friendStore.js (/Users/your_user/Developer/react/tutorial/src/stores/friendStore.js)

    If this is wrong then you have to verify your sourceMapPathOverrides in your launch.json, examples are available on the extension's page

    0 讨论(0)
提交回复
热议问题