Отладка и перезапуск при изменении машинописного кода vscode

Я хочу отлаживать и устанавливать точки останова в файлах машинописного текста и перезапускать отладчик при внесении изменений (например, nodemon следит за изменениями) с конфигурацией отладчика VSCode.

До сих пор мне удавалось работать через VSCode и перезапускать при внесении изменений без отладки.

Вот мой файл launch.json:

{
    "name": "Launch Typescript Server Debugger",
    "request": "launch",
    "type": "node",
    "cwd": "${workspaceRoot}",
    "protocol": "inspector",
    "stopOnEntry": false,
    "program": "${workspaceRoot}/node_modules/nodemon/bin/nodemon",
    "args": [
      "--watch",
      "src/**/*.ts",
      "--ignore",
      "src/**/*.spec.ts",
      "--exec",
      "${workspaceRoot}/node_modules/.bin/ts-node",
      "--inspect",
      "src/app.ts"
    ],
    "restart": true,        
    "env": { "NODE_ENV": "dev"}
  }      

Любые идеи?


person importantquestion    schedule 26.01.2018    source источник
comment
Чего именно вы хотите добиться? Вы уже поместили все конфигурации отладки в свой launch.json. запуск приложения обязательно переведет ваше приложение в режим отладки в vscode.   -  person Maddy Blacklisted    schedule 27.01.2018
comment
Я хочу отлаживать и устанавливать точки останова в ts-файлах, чего я на самом деле не могу сделать прямо сейчас.   -  person importantquestion    schedule 27.01.2018
comment
Вы всегда можете добавить точку останова в любой из операторов кода, щелкнув слева рядом с операторами, на которых вы хотите, чтобы код прерывался. Небольшая вертикальная полоса в левой части редактора сразу после номеров строк предназначена только для точек останова.   -  person Maddy Blacklisted    schedule 27.01.2018
comment
Я знаю, как устанавливать точки останова ... не оскорбляйте меня так :( Это не проблема. Я могу установить точку останова, но отладчик никогда не доберется до них, поэтому я задал вопрос, чтобы найти способ добиться отладки и перезапустите после внесения изменений.   -  person importantquestion    schedule 27.01.2018
comment
Честно говоря, я никогда не хотел оскорблять и сожалеть, если это действительно так воспринимается. Но как читателю вопрос не совсем ясен.   -  person Maddy Blacklisted    schedule 27.01.2018
comment
Поговорим о том, чтобы кусать руку, которая только пыталась помочь. В ваших интересах побудить всех нас продолжать попытки помочь вам.   -  person Hovercraft Full Of Eels    schedule 27.01.2018


Ответы (5)


Интересно, почему так много WTF комментируют этот совершенно естественный вопрос. Вот как я это сделал:

Нам нужен nodemon, чтобы перезапускать наше приложение при внесении изменений, нам нужен ts-node / register для запуска нашего typescrypt, и нам нужно настроить скрипт запуска vscode для повторного подключения отладчика после того, как приложение будет перекомпилирован. Итак, установите nodemon, ts-node и добавьте этот скрипт в package.json:

"watch:debug": "nodemon --inspect=5858 -e ts,tsx --exec node -r ts-node/register ./src/index.ts"

Затем в launch.json добавьте конфигурацию:

{
  "name": "Attach to Process",
  "type": "node",
  "request": "attach",
  "restart": true,
  "port": 5858,
  "outFiles": [],
  "sourceMaps": true
},

Вот и все, теперь я могу запустить свое приложение с помощью yarn watch: debug и подключить отладчик. Если у вас все еще возникают проблемы, посетите мой репозиторий Github здесь.

person Anton Pegov    schedule 21.10.2018
comment
Это указывало мне в правильном направлении. Мне пришлось настроить часы: задача отладки: "watch:debug": "nodemon -e ts,tsc --exec\"node --inspect=5858 -r ts-node/register ./src/server.ts\"" Без дополнительного набора кавычек команда npm не запускалась бы для меня - person Dave; 08.05.2020
comment
Это сработало для меня. Мне нужно снова просмотреть документацию, чтобы понять, что означают некоторые из этих переключателей. - person Kai CriticallyAcclaimed Cooper; 25.06.2020

Без использования ts-node вы можете перезапустить при изменении с этой конфигурацией

task.json

Эта задача просматривает файлы ts и компилирует их при сохранении

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "typescript",
            "type": "typescript",
            "tsconfig": "tsconfig.json",
            "problemMatcher": ["$tsc-watch"],
            "option": "watch"
        }
    ]
}

затем в launch.json,

nodemon перезагружается при изменении (в моем случае встроенные файлы находятся в каталоге dist)

       {
            "type": "node",
            "request": "launch",
            "runtimeExecutable": "nodemon",
            "args": ["--watch", "dist"],
            "name": "Debug TypeScript in Node.js",
            "preLaunchTask": "typescript",
            "program": "${workspaceFolder}/start.js",
            "cwd": "${workspaceFolder}",
            "protocol": "inspector",
            "outFiles": ["${workspaceFolder}/dist/**/*.js"],
            "restart": true
        }

person Mickael Lecoq    schedule 04.04.2019

вам обязательно стоит проверить ts-node-dev, который IMHO быстрее, чем nodemon в терминах наблюдения за компиляцией, потому что он разделяет процесс компиляции Typescript между перезапусками. Ниже приведен пример конфигурации vscode launch.json, позволяющий установить точку останова (отладка), а также перезагрузить при изменении.

{
  "version": "1.0.0",
  "configurations": [
    {
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "name": "Local Server",
      "restart": true,
      "request": "launch",
      "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/ts-node-dev",
      "skipFiles": [ "<node_internals>/**" ],
      "type": "node",
      "runtimeArgs": [ "--respawn" ],
      "args": [ "${workspaceFolder}/src/script/local.server.ts" ]
    }
  ]
}

Теперь вы можете нажать F5 или использовать панель отладки, чтобы начать отладку / перезагрузку в реальном времени.

Я собрал для этого небольшую библиотеку, если вы разрабатываете с aws lambda

https://github.com/vcfvct/ts-lambda-local-dev
person LeOn - Han Li    schedule 01.04.2021

Непонятно, о чем именно вы спрашиваете, но это может быть полезно. Попробуйте добавить эти конфигурации в свой

{
 "name": "Current TS File",
 "type": "node",
 "request": "launch",
 "args": ["${relativeFile}"],
 "runtimeArgs": ["--nolazy", "-r", "ts-node/register"],
 "sourceMaps": true,
 "cwd": "${workspaceRoot}",
 "protocol": "inspector",
}

Эта конфигурация:

  • Устанавливает задачу узла, которая запускает текущий открытый файл в VS Code (переменная $ {relativeFile} содержит текущий открытый файл)
  • Передает аргумент --nolazy для узла, который сообщает v8 о необходимости скомпилировать ваш код заранее, чтобы точки останова работали правильно.
  • Передает -r ts-node / register для узла, который гарантирует, что ts-node загружается, прежде чем он попытается выполнить ваш код
  • Устанавливает рабочий каталог в корень проекта - $ {workspaceRoot}
  • Устанавливает протокол отладки узла в режим V8 Inspector.

Я сомневаюсь, что тебе не хватает

 "runtimeArgs": ["--nolazy"]

В тебе запускаете конфигурацию.

person Maddy Blacklisted    schedule 26.01.2018
comment
Хорошо, это работает, только если я запускаю его, когда нахожусь в файлах 'src / app.ts', но он не перезапускается, когда я редактирую изменения в файле и сохраняю, как предыдущие конфигурации. - person importantquestion; 27.01.2018

Этот мне подходит. Я использую Typescript и Node вместе.

Это мой launch.json

{
    // 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": "node",
            "request": "launch",
            "name": "Launch Program",
            "program": "${workspaceFolder}/src/index.ts",
            "preLaunchTask": {
                "type": "typescript",
                "tsconfig": "tsconfig.json",
                "option": "watch",
                "problemMatcher": [
                    "$tsc-watch"
                ],
                "group": "build"
            },
            "outFiles": [
                "${workspaceFolder}/lib/**/*.js"
            ],
            "runtimeExecutable": "nodemon",
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen"
        }
    ]
}
person Ali Shah lakhani    schedule 23.01.2020
comment
Как выглядят ваши nodemon.json и tsconfig.json? - person Mike Kormendy; 08.08.2020
comment
И как выглядит ваш package.json? - person Mike Kormendy; 08.08.2020