Конфигурация отладки vscode для пограничного модуля Azure, работающего в пограничном симуляторе?

В моем окне разработчика (Windows) у меня есть рабочая область Visual Studio Code IoT Edge, содержащая разрабатываемый мной модуль C ++ IoT Edge. Мой блок разработчика работает под управлением Windows с Docker Desktop.

У меня проблемы с отладкой этого модуля в локальном симуляторе IoT Edge (edgeHubDev).

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

Но когда я «создаю и запускаю решение в симуляторе», я не могу заставить сработать точки останова. Запуск отладки позволяет мне выбрать процесс модуля, поэтому, похоже, VSCode фактически обращается к контейнеру модуля.

Это конфигурация отладки, которую я использую (launch.json):

{
  "name": "edge simulator module",
  "type": "cppdbg",
  "request": "attach",
  "program": "module",
  "processId": "${command:pickRemoteProcess}",
  "pipeTransport": {
    "pipeCwd": "${workspaceFolder}",
    "pipeProgram": "docker",
    "pipeArgs": [
      "exec",
      "-i",
      "module",
      "sh",
      "-c"
    ],
    "debuggerPath": "/usr/bin/gdb"
  },
  "sourceFileMap": {
    "/app": "${workspaceFolder}/modules/module"
  },
  "linux": {
    "MIMode": "gdb",
    "setupCommands": [
      {
        "description": "Enable pretty-printing for gdb",
        "text": "-enable-pretty-printing",
        "ignoreFailures": true
      }
    ]
  },
  "osx": {
    "MIMode": "lldb"
  },
  "windows": {
    "MIMode": "gdb",
    "setupCommands": [
      {
        "description": "Enable pretty-printing for gdb",
        "text": "-enable-pretty-printing",
        "ignoreFailures": true
      }
    ]
  }
},

VSCode действительно видит, что модуль работает, потому что я получаю окно вывода отладки, которое исчезает, когда я завершаю работу edgeHubDev.

Пока контейнер запущен, я могу запускать команды докеров (ps -ef, ls) для изображения, поэтому я знаю, что процесс модуля запущен.

Есть идеи, почему точки останова не срабатывают, если они нормально работают на «реальном» пограничном устройстве?


person cardinalPilot    schedule 24.05.2020    source источник
comment
Вы смотрели Отладка в режиме подключения с помощью IoT Edge Simulator (C #, Node.js, Java, Функции Azure) ? Подтвердите, что следующие модули C #, включая модули для функций Azure, поддерживают отладку в контейнерах Linux amd64.   -  person asergaz    schedule 02.06.2020
comment
Да, был, но не относился к моему проекту на C ++ ...   -  person cardinalPilot    schedule 03.06.2020
comment
Каков результат, когда вы пытаетесь отладить его с помощью VS2019? docs.microsoft.com/ en-us / azure / iot-edge /   -  person asergaz    schedule 03.06.2020
comment
У меня нет VS2019 ....: P   -  person cardinalPilot    schedule 07.06.2020
comment
Он должен работать с Visual Studio 2019 Community Edition. Можете ли вы попробовать?   -  person asergaz    schedule 24.06.2020


Ответы (1)


Сначала убедитесь, что вы используете отладочную версию модуля, чтобы он установил материал, который будет использоваться для отладки.

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

Также обратите внимание на vscode cpptools repo, возможно, есть какие-то связанные проблемы с отладкой проекта C ++.

person SLdragon    schedule 28.06.2020