В моем окне разработчика (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) для изображения, поэтому я знаю, что процесс модуля запущен.
Есть идеи, почему точки останова не срабатывают, если они нормально работают на «реальном» пограничном устройстве?