{
  "debugExtensions": {
    "azurespheredbg": {
      "vsDebugEngineGuid": "{ea6637c6-17df-45b5-a183-0951c54243bc}",
      "VsDebugTargetInfo4": {
        "bstrCurDir": "${workspaceRoot}",
        "bstrExe": "${debugInfo.target}",
        "bstrOptions": "*"
      },
      "templates": [
        {
          "templateId": "DebugAzureSphere",
          "displayName": "Azure Sphere",
          "description": "Debug an Azure Sphere application (High-Level or Real-Time)",
          "fileExtensions": [
            "*.out"
          ],
          "initialConfiguration": {
            "workingDirectory": "${workspaceRoot}",
            "applicationPath": "${debugInfo.target}",
            "imagePath": "${debugInfo.targetImage}",
            "partnerComponents": []
          }
        }
      ],
      "schema": {
        "definitions": {
          "azure_sphere_debugging_schema": {
            "type": "object",
            "properties": {
              "customLauncher": {
                "type": "string",
                "description": "Name of the the debug launcher in effect for the debug operation. Must be set to \"AzureSphereLaunchOptions\". Requires Visual Studio version 15.8 or greater."
              },
              "applicationPath": {
                "type": "string",
                "description": "Full path to program executable. When using CMake the macro ${debugInfo.target} can be used as the value of this property."
              },
              "serverStartTimeout": {
                "type": "integer",
                "description": "Time (ms) to wait for the debug server on the device to successfully start.",
                "minimum": 0
              },
              "debuggerPath": {
                "type": "string",
                "description": "The path to the debugger. The debugger must support gdb's MI interface. When unspecified it will use gdb installed by the Azure Sphere SDK."
              },
              "targetApiSet": {
                "type": "string",
                "description": "The API set being used by the application. When using CMake the macro ${env.AzureSphereTargetApiSet} can be used to copy the value from CMakeSettings.json."
              },
              "targetCore": {
                "type": "string",
                "description": "Which core to deploy the application to. Options are HLCore or RTCore.  To deploy to both cores, select AnyCore.",
                "enum": [
                  "HLCore",
                  "RTCore",
                  "AnyCore"
                ]
              },
              "targetArmToolsetPath": {
                "type": "string",
                "description": "The ARM toolset path to find GDB for debugging a RTApp."
              },
              "targetOnChipDebugger": {
                "type": "string",
                "description": "The On Chip Debugger for debugging an RTApp."
              },
              "targetOnChipDebuggerArgs": {
                "type": "string",
                "description": "The arguments for the On Chip Debugger for debugging an RTApp. Expression ${azsphere.rtcore} is evaluated to the RTCore number running the image."
              },
              "targetOnChipDebuggerPort": {
                "type": "integer",
                "description": "The port for GDB to connect to the On Chip Debugger for debugging an RTApp.",
                "minimum": 0,
                "maximum": 65535
              },
              "symbolPath": {
                "type": "string",
                "description": "Full path to debug symbols, if different from the \"applicationPath\"."
              },
              "workingDirectory": {
                "type": "string",
                "description": "The working directory, usually ${workspaceRoot}"
              },
              "additionalSolibSearchPath": {
                "type": "string",
                "description": "Semicolon (;) separated list of paths. The debugger will search these paths for symbols that match shared libraries loaded by the application."
              },
              "visualizerFile": {
                "type": "string",
                "description": "A .natvis file to be used when debugging this process."
              },
              "imagePath": {
                "type": "string",
                "description": "Full path to the application's \".imagepackage\" file. The macro ${debugInfo.targetImage} can be used as the value of this field if the image is in the same folder as the \"applicationPath\"."
              },
              "symbolCachePath": {
                "type": "string",
                "description": "Full path of location to store symbols copied from the device. The macro ${debuginfo.symbolCachePath} can be used to specify the current Visual Studio Symbol Cache location setting."
              },
              "sourceMap": {
                "type": "array",
                "description": "List of pairs of location to help the debugger and editor associate local files with remote files.",
                "items": {
                  "properties": {
                    "editorPath": {
                      "type": "string",
                      "description": "The location of additional source code for the editor to locate."
                    },
                    "compileTimePath": {
                      "type": "string",
                      "description": "The location to the source tree at compile time."
                    }
                  }
                }
              },
              "hardwareBreakpoints": {
                "type": "object",
                "description": "Explicit control of hardware breakpoint behavior for remote targets.",
                "default": {},
                "properties": {
                  "require": {
                    "type": "boolean",
                    "description": "If true, always use hardware breakpoints. Defaults to false.",
                    "default": false
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.",
                    "default": 0
                  }
                }
              },
              "partnerComponents": {
                "type": "array",
                "description": "List of partner images' ComponentIDs. Partner images are not removed from the device when the current image is deployed.",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "azureSphereTemplateLayout": {
            "allOf": [
              {
                "$ref": "#/definitions/default"
              },
              {
                "$ref": "#/definitions/azure_sphere_debugging_schema"
              }
            ]
          }
        },
        "configuration": "#/definitions/azureSphereTemplateLayout"
      }
    }
  }
}
