2017-05-29 27 views
8

Tôi có một thiết lập gỡ lỗi trong mã Visual Studio nơi tôi chạy một nhị phân bên ngoài có thể thực thi các tệp JS của tôi (sử dụng duktape). Bộ điều hợp gỡ lỗi hiện chỉ hỗ trợ các yêu cầu đính kèm (không khởi chạy) vì vậy tôi phải chạy nhị phân trước khi tôi có thể gỡ lỗi các tập lệnh JS.Làm thế nào để làm cho vscode không chờ đợi để hoàn thành một preLaunchTask?

Để tránh phải khởi động ứng dụng bằng tay tôi tạo ra một nhiệm vụ cho nó và thiết lập rằng trong tập tin launch.json tôi:

{ 
    "version": "0.2.0", 
    "configurations": [{ 
     "name": "Attach MGA", 
     "type": "duk", 
     "preLaunchTask": "debug mga", 
     "request": "attach", 

     "address": "localhost", 
     "port": 9091, 

     "localRoot": "${workspaceRoot}", 

     "stopOnEntry": false, 
     "debugLog": true 
    }] 
} 

Nhiệm vụ được định nghĩa như vậy:

{ 
    "version": "0.1.0", 
    "command": "<absolute path to>/mga", 
    "isShellCommand": false, 
    "showOutput": "always", 
    "suppressTaskName": true, 
    "tasks": [{ 
     "taskName": "debug mga", 
     "args": ["--debugger", "main.json"] 
    }] 
} 

Vấn đề hiện tại là vscode đợi nhiệm vụ khởi chạy trước để kết thúc, trong khi ứng dụng chờ một trình gỡ lỗi đính kèm. Bắt 22.

Làm cách nào để tránh vscode chờ đợi cho tác vụ khởi chạy trước kết thúc?

Cập nhật:

Trong khi đó tôi đã đọc lên trên the vscode task page và đã đưa ra cấu hình nhiệm vụ này. Tuy nhiên, nó không hoạt động đối với tôi

{ 
    "version": "2.0.0", 
    "tasks": [ 
     { 
      "label": "launch-mga", 
      "type": "shell", 
      "command": "<absolute path to>/mga", 
      "args": [ 
       "config/main.json", 
       "--debugger" 
      ], 
      "isBackground": true, 
      "problemMatcher": { 
       "owner": "custom", 
       "pattern": { 
        "regexp": "_____" 
       }, 
       "background": { 
        "activeOnStart": true, 
        "beginsPattern": "^.*Waiting for debug connection.*$", 
        "endsPattern": "^.*blah.*$" 
       }, 
      }, 
     } 
    ] 
} 

Ứng dụng được khởi chạy in kết nối gỡ lỗi và chờ vô tận. Có lẽ vấn đề phải làm với ứng dụng (đó là Node.js kinda như ứng dụng đầu cuối), được viết bằng C++?

Trả lời

0

Làm thế nào về cố gắng để làm cho nó công việc nền bằng cách thêm: "isBackground": true

+0

Điều này không hữu ích. vscode vẫn đang chờ nhiệm vụ prelaunch kết thúc. –

3

Background/xem nhiệm vụ

Một số công cụ hỗ trợ chạy ở chế độ nền trong khi xem các hệ thống tập tin thay đổi và sau đó kích hoạt một hành động khi một tập tin thay đổi trên đĩa. Với Gulp chức năng như vậy được cung cấp thông qua mô-đun nul gulp-watch. Trình biên dịch TypeScript tsc đã xây dựng hỗ trợ cho điều này thông qua tùy chọn dòng --watch command.

Để cung cấp phản hồi rằng tác vụ nền đang hoạt động trong Mã VS và tạo ra kết quả sự cố, trình ghép sự cố phải sử dụng thông tin bổ sung để phát hiện các thay đổi này trong đầu ra. Hãy lấy trình biên dịch tsc làm ví dụ. Khi trình biên dịch được bắt đầu trong chế độ xem, nó in thêm các thông tin sau vào giao diện điều khiển:

> tsc --watch 
12:30:36 PM - Compilation complete. Watching for file changes. 

Khi một tập tin thay đổi trên đĩa, trong đó có một vấn đề, đầu ra sau đây xuất hiện:

12:32:35 PM - File change detected. Starting incremental compilation... 
src/messages.ts(276,9): error TS2304: Cannot find name 'candidate'. 
12:32:35 PM - Compilation complete. Watching for file changes. 

Nhìn ở đầu ra cho thấy mẫu sau:

  • Trình biên dịch chạy khi File change detected. Starting incremental compilation... được in trên bảng điều khiển.
  • Trình biên dịch dừng khi Compilation complete. Watching for file changes. được in trên bảng điều khiển.
  • Giữa hai lỗi này được báo cáo.
  • Trình biên dịch cũng chạy khi khởi động ban đầu (không in File change detected. Starting incremental compilation... vào bảng điều khiển).

Để nắm bắt thông tin này, người so sánh sự cố có thể cung cấp thuộc tính background.

Đối với trình biên dịch tsc, một tài sản background thích hợp trông như thế này:

"background": { 
    "activeOnStart": true, 
    "beginsPattern": "^\\s*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: AM| PM)? - File change detected\\. Starting incremental compilation\\.\\.\\.", 
    "endsPattern": "^\\s*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: AM| PM)? - Compilation complete\\. Watching for file changes\\." 
} 

Ngoài các background tài sản trên các vấn đề khớp, nhiệm vụ riêng của mình phải được đánh dấu là isBackground để các nhiệm vụ giữ chạy trong nền.

Một đầy đủ thủ công tasks.json cho một nhiệm vụ tsc chạy trong chế độ đồng hồ trông như thế này:

{ 
    "version": "2.0.0", 
    "tasks": [ 
     { 
      "label": "watch", 
      "command": "tsc", 
      "args": ["--watch"], 
      "isBackground": true, 
      "problemMatcher": { 
       "owner": "typescript", 
       "fileLocation": "relative", 
       "pattern": { 
        "regexp": "^([^\\s].*)\\((\\d+|\\,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$", 
        "file": 1, 
        "location": 2, 
        "severity": 3, 
        "code": 4, 
        "message": 5 
       }, 
       "background": { 
        "activeOnStart": true, 
        "beginsPattern": "^\\s*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: AM| PM)? - File change detected\\. Starting incremental compilation\\.\\.\\.", 
        "endsPattern": "^\\s*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: AM| PM)? - Compilation complete\\. Watching for file changes\\." 
       } 
      } 
     } 
    ] 
} 

PS: Nội dung lấy từ https://code.visualstudio.com/docs/editor/tasks

Sửa-1

Nhiệm vụ cần được khởi chạy như một daemon, sau đó chỉ isBackground sẽ giúp ích. Vì vậy, bạn sẽ có một cái gì đó như

"isShellCommand": true, 
"command": "<absolute path to>/mga --config xyz abc &", 
+0

Thật không may, 'isBackground' không giúp ích gì. vscode vẫn đang chờ nhiệm vụ prelaunch kết thúc. –

+0

@MikeLischke, vui lòng kiểm tra chỉnh sửa và xem nó có giúp ích –

+0

Stil không may mắn không. Sau khi thay đổi thành những gì bạn đã đề xuất trong bản chỉnh sửa của mình, tôi chỉ nhận được thông báo lỗi: 'Không thể khởi chạy chương trình bên ngoài /mga --debugger config/main.json &. spawn <đường dẫn tuyệt đối tới>/mga --debugger config/main.json & ENOENT'. Rất kì lạ. –

Các vấn đề liên quan