首页 > 解决方案 > 在边缘模拟器中运行的 Azure Edge 模块的 vscode 调试配置?

问题描述

在我的开发盒 (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 时该窗口消失了。

在容器运行时,我可以对映像运行 docker 命令(ps -ef,ls),因此我知道模块进程正在运行。

当断点在“真正的”边缘设备中正常工作时,为什么断点不会命中的任何想法?

标签: visual-studio-codeazure-iot-edge

解决方案


首先确保您使用的是模块的调试版本,以便它安装将用于调试的材料。

如果还是不能调试,可以分享你的完整样例工程,让我们看看。

也看看vscode cpptools repo,也许有一些调试 C++ 项目的相关问题。


推荐阅读