Отладка кода VS: можно ли предоставить идентификатор процесса pgrep -x $ myprog для использования в launch.json (переменная processId) при присоединении к идентификатору процесса?

Я заметил, что для node.js есть функция автоматического подключения отладчика, которую я хотел бы использовать, если это возможно. Однако я не думаю, что могу использовать автоматическое присоединение для автоматического запуска отладчика после повторной компиляции моей программы. Я компилирую свою программу, используя C / C ++ / Fortran, используя make-файлы (и аналогичные), поэтому после запуска make я получаю обычный исполняемый файл (linux). Затем я выполняю этот двоичный файл и часто хочу сразу же отладить его после этого. У меня есть полный двоичный путь к переменной среды $ myprog = / home / user / my-dev / bin / myApp.

Итак, что я делаю, так это запускаю отладку с помощью Attach to process, и каждый раз, когда мне нужно найти правильный процесс в раскрывающемся списке, но я делаю это слишком много раз каждый день, каждый час, это становится утомительным и хотелось бы что-то умнее, автоматичнее:

Вместо автоматического присоединения (только для node.js, насколько я понимаю) я хотел бы изменить свой launch.json, чтобы он автоматически извлекал идентификатор процесса, используя, например, команда оболочки: 'pgrep -x $ myprog' и, возможно, необязательно привязать ее к сочетанию клавиш ... Я предполагаю, что строку processId: $ {command: pickProcess} необходимо изменить, см. пример конфигурации ниже:

 {
            "name": "(gdb) Attach (any)",
            "type": "cppdbg",
            "request": "attach",
            "program": "/home/user/my-dev/bin/myApp",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb"
        },

Можно ли изменить файл launch.json, чтобы код VS понимал, что переменная processId должна быть заменена выводом оболочки из: 'pgrep -x $ myprog' (очевидно, этот PID изменяется после каждой компиляции и выполнения программы, которая должна быть отлажен)? Если так, я думаю, его также можно привязать к сочетанию клавиш ... Кто-нибудь знает, как этого добиться?


person Okay Dokey    schedule 14.01.2021    source источник


Ответы (1)


Да, это возможно с использованием расширения ввода оболочки задач . Он предоставляет команду vscode, которая может возвращать результат команды оболочки.

Соответствующие части моего рабочего места выглядят так.

"launch": {
    "configurations": [
        {
            ...
            "processId": "${input:FindVivadoPID}",
            ...
        }
    ],
    "inputs": [
        {
          "id": "FindVivadoPID",
          "type": "command",
          "command": "shellCommand.execute",
          "args": {
            "command": "pgrep 'ecold.*lnx64.g/vivado' -f",
            "description": "Select your Vivado PID",
            "useFirstResult": true,
          }
        }
    ]
}

Каждый раз, когда я запускаю Start Debugging, он автоматически находит соответствующий процесс и подключается.

В этом вопросе о переполнении стека говорится о расширении в целом. .

person cynthi8    schedule 19.05.2021
comment
Извините за задержку с ответом. Я не могу загрузить / увидеть это расширение из VS Code. Проверим github.com/microsoft/vscode/issues/108147 и скоро вернусь - Надеюсь, ответ Accept решен, большое спасибо, это выглядит действительно многообещающим и именно то, что я ищу! - person Okay Dokey; 21.05.2021
comment
Это был фантастический ответ, большое спасибо! А тем, кому нужно расширение, но которые не видят его из кода VS, я предлагаю использовать ссылку выше, чтобы загрузить расширение вручную и установить из VSIX ... - теперь все работает, очень хорошо, спасибо! - person Okay Dokey; 21.05.2021