Làm thế nào để gỡ lỗi Angular với VSCode?


127

Làm cách nào để tôi định cấu hình Angular và VSCode để các điểm dừng của tôi hoạt động?


Ý anh là gì? Làm thế nào để họ không làm việc?
TylerH

2
@TylerH, Nó nên là một hướng dẫn cách nó hoạt động. nó không hoạt động mà không sửa đổi launch.json.
Asesjix

Câu trả lời:


178

Đã thử nghiệm với Angular 5 / CLI 1.5.5

  1. Cài đặt tiện ích mở rộng trình gỡ lỗi Chrome
  2. Tạo launch.jsonthư mục (bên trong .vscode)
  3. Sử dụng của tôi launch.json(xem bên dưới)
  4. Tạo tasks.jsonthư mục (bên trong .vscode)
  5. Sử dụng của tôi tasks.json(xem bên dưới)
  6. Nhấn CTRL+ SHIFT+B
  7. nhấn F5

launch.json for angular/cli >= 1.3

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Chrome",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:4200/#",
      "webRoot": "${workspaceFolder}"
    },
    {
      "name": "Attach Chrome",
      "type": "chrome",
      "request": "attach",
      "url": "http://localhost:4200/#",
      "webRoot": "${workspaceFolder}"
    },
    {
      "name": "Launch Chrome (Test)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:9876/debug.html",
      "webRoot": "${workspaceFolder}"
    },
    {
      "name": "Launch Chrome (E2E)",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/node_modules/protractor/bin/protractor",
      "protocol": "inspector",
      "args": ["${workspaceFolder}/protractor.conf.js"]
    }
  ]
}

tasks.json for angular/cli >= 1.3

{
    "version": "2.0.0",
    "tasks": [
      {
        "identifier": "ng serve",
        "type": "npm",
        "script": "start",
        "problemMatcher": [],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      },
      {
        "identifier": "ng test",
        "type": "npm",
        "script": "test",
        "problemMatcher": [],
        "group": {
          "kind": "test",
          "isDefault": true
        }
      }
    ]
  }

Đã thử nghiệm với Angular 2.4.8

  1. Cài đặt tiện ích mở rộng trình gỡ lỗi Chrome
  2. Tạo launch.json
  3. Sử dụng của tôi launch.json(xem bên dưới)
  4. Khởi động máy chủ phát triển NG Live ( ng serve)
  5. nhấn F5

launch.json for angular/cli >= 1.0.0-beta.32

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome",
      "url": "http://localhost:4200",
      "webRoot": "${workspaceFolder}",
      "sourceMaps": true,
      "userDataDir": "${workspaceFolder}/.vscode/chrome",
      "runtimeArgs": [
        "--disable-session-crashed-bubble"
      ]
    },
    {
      "name": "Attach Chrome",
      "type": "chrome",
      "request": "attach",
      "url": "http://localhost:4200",
      "port": 9222,
      "webRoot": "${workspaceFolder}",
      "sourceMaps": true
    }
  ]
}

launch.json for angular/cli < 1.0.0-beta.32

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Lunch Chrome",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:4200",
      "webRoot": "${workspaceFolder}/src/app",
      "sourceMaps": true,
      "sourceMapPathOverrides": {
        "webpack:///./~/*": "${workspaceFolder}/node_modules/*",
        "webpack:///./src/*": "${workspaceFolder}/src/*"
      },
      "userDataDir": "${workspaceFolder}/.vscode/chrome",
      "runtimeArgs": [
        "--disable-session-crashed-bubble"
      ]
    },
    {
      "name": "Attach Chrome",
      "type": "chrome",
      "request": "attach",
      "url": "http://localhost:4200",
      "port": 9222,
      "webRoot": "${workspaceFolder}/src/app",
      "sourceMaps": true,
      "sourceMapPathOverrides": {
        "webpack:///./~/*": "${workspaceFolder}/node_modules/*",
        "webpack:///./src/*": "${workspaceFolder}/src/*"
      }
    }
  ]
}

7
Bạn có biết làm thế nào để bắt đầu NG Live Development Servervà sau đó khởi chạy Chromechỉ bằng một F5cú nhấp chuột?
Merdan Gochmuradov

2
xin lỗi, điều đó là không thể vì nhiệm vụ "ng phục vụ" sẽ phải được bắt đầu trong preLaunchTask. "ng phục vụ" phải được chạy vĩnh viễn và do đó "preLaunchTask" không được hoàn thành, điều đó có nghĩa là mã vs không bắt đầu quá trình gỡ lỗi. nhưng tôi đã thêm một cấu hình mới sẽ giúp công việc nhanh hơn một chút ;-)
Asesjix

1
Câu trả lời rõ ràng và ngắn gọn. Sẽ tốt hơn nếu bạn có thể giải thích ngắn gọn về launch.jsontasks.jsonlàm ở đây. Theo tôi hiểu launch.jsonlà khởi chạy máy chủ nút và lắng nghe cổng 8080, và tasks.jsonhướng dẫn sử dụng npmvà thực thi lệnh ng serveđể chạy ứng dụng.
shaijut

@Zachscs bạn đã sử dụng phiên bản góc nào?
Asesjix

1
Tôi đã có cùng một vấn đề, các điểm dừng không được thiết lập, cho đến cuối cùng tôi nhận ra rằng webroot của tôi đã sai. Tôi đã có giá trị mặc định cho webRoot ("webRoot": "$ {workspaceFolder}") thay vì $ {workspaceFolder} / thư mục my-app-
Joseph

48

Có vẻ như nhóm VS Code hiện đang lưu trữ các công thức gỡ lỗi.

https://github.com/Microsoft/vscode-recipes/tree/master/Angular-CLI

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Chrome with ng serve",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:4200",
      "webRoot": "${workspaceRoot}"
    },
    {
      "name": "Launch Chrome with ng test",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:9876/debug.html",
      "webRoot": "${workspaceRoot}"
    },
    {
      "name": "Launch ng e2e",
      "type": "node",
      "request": "launch",
      "program": "${workspaceRoot}/node_modules/protractor/bin/protractor",
      "protocol": "inspector",
      "args": ["${workspaceRoot}/protractor.conf.js"]
    }      
  ]
}

10

Có hai cách khác nhau để làm điều đó. Bạn có thể khởi chạy một quy trình mới hoặc đính kèm vào một quy trình hiện có.

Điểm mấu chốt trong cả hai quy trình là có máy chủ phát triển webpack và trình gỡ lỗi VSCode chạy cùng một lúc .

Khởi động một quá trình

  1. Trong bạn launch.jsontập thêm các cấu hình sau:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Angular debugging session",
          "type": "chrome",
          "request": "launch",
          "url": "http://localhost:4200",
          "webRoot": "${workspaceFolder}"
        }
      ]
    }
    
  2. Chạy máy chủ phát triển Webpack từ Angular CLI bằng cách thực thi npm start

  3. Chuyển đến trình gỡ lỗi VSCode và chạy cấu hình "Phiên gỡ lỗi góc". Do đó, cửa sổ trình duyệt mới với ứng dụng của bạn sẽ được mở.

Đính kèm với một quy trình hiện có

  1. Vì vậy, bạn cần chạy Chrome ở chế độ gỡ lỗi với cổng đã mở (trong trường hợp của tôi là như vậy 9222):

    Mac:

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
    

    Các cửa sổ:

    chrome.exe --remote-debugging-port=9222
    
  2. launch.json tập tin sẽ nhìn theo cách sau:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Chrome Attach",
          "type": "chrome",
          "request": "attach",
          "port": 9222,
          "url": "http://localhost:4200/",
          "webRoot": "${workspaceFolder}"
        } 
      ]
    }
    
  3. Chạy máy chủ phát triển Webpack từ Angular CLI bằng cách thực thi npm start
  4. Chọn "Cấu hình Chrome Đính kèm Chrome và chạy nó.

Trong trường hợp này, trình gỡ lỗi được đính kèm với quy trình Chrome hiện tại thay vì khởi chạy một cửa sổ mới.

Tôi đã viết bài báo của riêng tôi, nơi tôi mô tả phương pháp này với hình minh họa.

Hướng dẫn đơn giản cách định cấu hình trình gỡ lỗi cho Angular trong VSCode


Cảm ơn bạn, mỗi khi bắt đầu chrome tôi phải chạy lệnh này chrome.exe --remote-debugging-port=9222. Có cách nào khác để cấu hình một lần không
Saurabh47g

Tùy thuộc vào thông tin đăng nhập của bạn, bạn có thể nhấp chuột phải vào chrome trong menu bắt đầu của cửa sổ, nhấn thuộc tính và thêm cờ ở đó. Điều này không làm việc cho tôi trên máy tính làm việc của tôi, vì vậy tôi đã đặt bí danh lệnh trong git bash cho windows.
vitale 232

7

Điều này được giải thích chi tiết trên trang web Visual Studio Code: https://code.visualstudio.com/docs/nodejs/angular-tutorial


ý bạn là code.visualstudio.com/docs/nodejs/ trên ? các điểm · # _debugging-góc trực tiếp đến điểm thú vị nếu bạn muốn chỉnh sửa câu trả lời của mình ...
Pipo

@Pipo Không, tôi không có ý là nodejs, tôi không sử dụng nodejs ở phía máy chủ, vì vậy tôi không biết.
Victor Ionescu

3

Có thể sử dụng cấu hình này:

{
 "version": "0.2.0",
"configurations": [
{
        "name": "ng serve",
        "type": "chrome",
        "request": "launch",
        "preLaunchTask": "npm: start",
        "url": "http://localhost:8080",
        "webRoot": "${workspaceFolder}"
      }
]
}

2

Đây là một giải pháp nhẹ hơn, hoạt động với Angular 2+ (Tôi đang sử dụng Angular 4)

Đồng thời thêm các cài đặt cho Express Server nếu bạn chạy stack MEAN.

{
  // Use IntelliSense to learn about possible Node.js debug attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Angular Client",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:4200",
      "runtimeArgs": [
        "--user-data-dir",
        "--remote-debugging-port=9222"
        ],
        "sourceMaps": true,
        "trace": true,
        "webRoot": "${workspaceRoot}/client/",
        "userDataDir": "${workspaceRoot}/.vscode/chrome"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Express Server",
      "program": "${workspaceRoot}/server/bin/www",
      "outFiles": [
        "${workspaceRoot}/out/**/*.js"
      ]
    }
  ]
}

Bạn có thể gỡ lỗi / ngắt điểm mã phía máy chủ của mình cùng lúc với góc với cấu hình này không?
Mika571

@ Mika571 không may ... Tôi đã thử điều này ngay bây giờ. Tôi cũng muốn gỡ lỗi máy chủ và máy khách cùng một lúc.
Leniel Maccaferri

1

Câu trả lời @Asesjix rất kỹ lưỡng, nhưng như một số người đã chỉ ra, vẫn cần nhiều tương tác để bắt đầu ng servevà sau đó khởi chạy ứng dụng Angular trong Chrome. Tôi đã làm việc này với một cú nhấp chuột bằng cách sử dụng cấu hình sau. Sự khác biệt chính từ câu trả lời của @ Asesjix là loại nhiệm vụ hiện có shellvà các lệnh gọi thêm starttrước ng serveđó để ng servecó thể tồn tại trong quy trình riêng của nó và không chặn trình gỡ lỗi khởi chạy:

task.json:

{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "ng serve",
        "type": "shell",
        "command": "\"start ng serve\""
      },
      {
        "label": "ng test",
        "type": "shell",
        "command": "\"start ng test\"",
      }
    ]
  }

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch in Chrome",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost:4200",
            "webRoot": "${workspaceFolder}",
            "preLaunchTask": "ng serve"
        }
    ]
}

0

Trong trường hợp của tôi, tôi đã không sử dụng cây thư mục dự án Angular ban đầu và tôi biết có gì đó không ổn với webRoot/ {workspaceFolder}bit nhưng tất cả các thử nghiệm của tôi đều không mang lại kết quả. Có một lời khuyên từ một câu trả lời SO khác mà tôi sẽ liên kết nếu tôi tìm thấy nó một lần nữa.

Điều giúp tôi là tìm nội dung của biến {workspaceFolder}khi chạy và sau đó sửa đổi nó thành vị trí của thư mục "src" mà bạn có "app / *". Để tìm nó, tôi đã thêm một preLaunchTasktệp launch.json của mình và một tác vụ để xuất giá trị của {workspaceFolder}.

launch.json , xuất hiện sau khi cài đặt trình gỡ lỗi Chrome

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome against localhost",
      "url": "http://localhost:4200",
      "webRoot": "${workspaceFolder}/src/newProjectRoot/",
      "preLaunchTask": "Echo values" //Just to see what the cryptic vs code variables actually are https://code.visualstudio.com/docs/editor/variables-reference
    }
  ]
}

T task.json Không có mặt theo mặc định. Nhấn Ctrl + Shift + p và tôi nghĩ nó được gọi là 'tạo tác vụ cho lệnh khác' hoặc một cái gì đó tương tự. Dường như không thể nhìn thấy nó sau khi task.json được tạo. Bạn cũng có thể tạo tệp ở cùng vị trí với launch.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Echo values",
      "command": "echo",
      "args": ["${env:USERNAME}", "workspaceFolder = ${workspaceFolder}"],
      "type": "shell"
    }
  ]
}

Khi tôi biết giá trị của $ {workspaceFolder}, tôi đã sửa nó để trỏ đến thư mục src của tôi trong cây dự án mới của tôi và tất cả đều hoạt động. Gỡ lỗi yêu cầu ng servephải được chạy dưới dạng nhiệm vụ prelaunch hoặc là một phần của quá trình xây dựng (ví dụ ở trên) hoặc trong dấu nhắc lệnh.

Dưới đây là một liên kết đến tất cả các biến, bạn có thể sử dụng:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.