{
  "debugExtensions": {
    "cppdbg": {
      "vsDebugEngineGuid": "{ea6637c6-17df-45b5-a183-0951c54243bc}",
      "VsDebugTargetInfo4": {
        "bstrCurDir": "${workspaceRoot}",
        "bstrExe": "${debugInfo.target}",
        "bstrOptions": "*"
      },
      "templates": [
        {
          "templateId": "launch",
          "displayName": "Запуск C/C++ для MinGW/Cygwin (gdb)",
          "description": "Конфигурация запуска отладки для кода C/C++, размещенного в MinGW или Cygwin.",
          "fileExtensions": [
            "*.exe",
            "*.out",
            "Файл makefile"
          ],
          "initialConfiguration": {
            "cwd": "${workspaceRoot}",
            "program": "${debugInfo.target}",
            "MIMode": "gdb",
            "miDebuggerPath": "${env.MINGW_PREFIX}\\bin\\gdb.exe",
            "externalConsole": true
          }
        },
        {
          "templateId": "attach",
          "displayName": "Подключение C/C++ для MinGW/Cygwin (gdb)",
          "description": "Конфигурация подключения отладки для кода C/C++, размещенного в MinGW или Cygwin.",
          "fileExtensions": [
            "*.exe",
            "*.out",
            "Файл makefile"
          ],
          "initialConfiguration": {
            "cwd": "${workspaceRoot}",
            "program": "${debugInfo.target}",
            "processId": "0",
            "MIMode": "gdb",
            "miDebuggerPath": "${env.MINGW_PREFIX}\\bin\\gdb.exe",
            "externalConsole": true
          }
        }
      ],
      "schema": {
        "definitions": {
          "cpp_schema": {
            "type": "object",
            "properties": {
              "program": {
                "type": "string",
                "description": "Полный путь к исполняемому файлу программы."
              },
              "processId": {
                "type": "integer",
                "description": "Необязательный идентификатор процесса для подключения отладчика."
              },
              "sourceFileMap": {
                "type": "object",
                "description": "Необязательное сопоставление исходных файлов, передаваемое в модуль отладки. Формат: { \"<исходное расположение компилятора>\": \"<исходное расположение редактора>\" } OR { \"<исходное расположение компилятора>\": { \"editorPath\": \"<исходное расположение редактора>\", \"useForBreakpoints\": true } }. \nПример: { \"/home/user/foo\": \"C:\\foo\" } OR { \"/home/user/foo\": { \"editorPath\": \"c:\\foo\", \"useForBreakpoints\": true } }.",
                "additionalProperties": {
                  "anyOf": {
                    "type": "string",
                    "$ref": "#/definitions/cpp_schema/definitions/sourceFileMapOptions"
                  }
                }
              },
              "MIMode": {
                "type": "string",
                "description": "Указывает тип отладчика консоли с поддержкой MI, к которому будет подключаться MIDebugEngine. \nДопустимые значения: \"gdb\", \"lldb\"."
              },
              "args": {
                "type": "array",
                "description": "Аргументы командной строки, переданные в программу.",
                "items": {
                  "type": "string"
                }
              },
              "environment": {
                "type": "array",
                "description": "Переменные среды для добавления в среду для программы. \nПример: [ { \"name\": \"squid\", \"value\": \"clam\" } ].",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              },
              "targetArchitecture": {
                "type": "string",
                "description": "Архитектура отлаживаемого объекта. Будет определяться автоматически, если этот параметр не задан. \nДопустимые значения: x86, arm, arm64, mips, x64, amd64, x86_64."
              },
              "cwd": {
                "type": "string",
                "description": "Рабочий каталог целевой программы."
              },
              "miDebuggerPath": {
                "type": "string",
                "description": "Путь к отладчику с поддержкой MI (например, gdb). Если не задан, сначала для отладчика будет выполняться поиск PATH."
              },
              "miDebuggerServerAddress": {
                "type": "string",
                "description": "Сетевой адрес сервера отладчика с поддержкой MI для подключения. \nПример: localhost:1234."
              },
              "setupCommands": {
                "type": "array",
                "description": "Одна или несколько команд GDB/LLDB, выполняемых для настройки базового отладчика. \nПример: \"setupCommands\": [ { \"text\": \"-enable-pretty-printing\", \"description\": \"Enable GDB pretty printing\", \"ignoreFailures\": true }].",
                "items": {
                  "$ref": "#/definitions/cpp_schema/definitions/launchSetupCommands"
                }
              },
              "customLaunchSetupCommands": {
                "type": "array",
                "description": "Если задан, этот параметр заменяет команды по умолчанию, используемые для запуска целевого объекта, некоторыми другими командами. \nНапример, это может быть \"-target-attach\" для подключения к целевому процессу. \nЕсли указать пустой список команд для замены команд запуска, никакие команды выполняться не будут, что может быть удобно в случаях, когда параметры запуска предоставляются отладчику как параметры командной строки. \nПример: \"customLaunchSetupCommands\": [ { \"text\": \"target-run\", \"description\": \"run target\", \"ignoreFailures\": false }].",
                "items": {
                  "$ref": "#/definitions/cpp_schema/definitions/launchSetupCommands"
                }
              },
              "launchCompleteCommand": {
                "type": "string",
                "enum": [
                  "exec-run",
                  "exec-continue",
                  "None"
                ],
                "description": "Команда, выполняемая после полной настройки отладчика для запуска целевого процесса. \nДопустимые значения: \"exec-run\", \"exec-continue\", \"None\". \nЗначение по умолчанию: \"exec-run\"."
              },
              "debugServerPath": {
                "type": "string",
                "description": "Необязательный полный путь к серверу отладки для запуска. \nЗначение по умолчанию: null."
              },
              "debugServerArgs": {
                "type": "string",
                "description": "Необязательные аргументы сервера отладки. \nЗначение по умолчанию: null."
              },
              "serverStarted": {
                "type": "string",
                "description": "Дополнительный запускаемый сервером шаблон для поиска в выходных данных сервера отладки. \nЗначение по умолчанию: null."
              },
              "filterStdout": {
                "type": "boolean",
                "description": "Поиск запущенного сервером шаблона в потоке stdout и регистрация stdout в выходных данных отладки. \nЗначение по умолчанию: true."
              },
              "filterStderr": {
                "type": "boolean",
                "description": "Поиск запущенного сервером шаблона в потоке stderr и регистрация stderr в выходных данных отладки. \nЗначение по умолчанию: false."
              },
              "serverLaunchTimeout": {
                "type": "integer",
                "description": "Необязательный период (в миллисекундах), в течение которого отладчик будет ожидать запуска debugServer. Значение по умолчанию: 10000."
              },
              "coreDumpPath": {
                "type": "string",
                "description": "Необязательный полный путь к основному файлу дампа для указанной программы. \nЗначение по умолчанию: NULL."
              },
              "externalConsole": {
                "type": "boolean",
                "description": "Если значение — true, выполняется запуск консоли для отлаживаемого объекта. Если значение — false, никакие консоли не запускаются. \nЗначение по умолчанию: false. Примечание. Этот параметр игнорируется в некоторых случаях по техническим причинам."
              },
              "pipeTransport": {
                "$ref": "#/definitions/cpp_schema/definitions/pipeTransportOptions"
              }
            },
            "definitions": {
              "launchSetupCommands": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "Команда отладчика для выполнения."
                  },
                  "description": {
                    "type": "string",
                    "description": "Необязательное описание команды."
                  },
                  "ignoreFailures": {
                    "type": "boolean",
                    "description": "Если значение — true, ошибки, передаваемые командой, следует игнорировать. \nЗначение по умолчанию: false."
                  }
                }
              },
              "pipeTransportOptions": {
                "type": "object",
                "description": "При наличии сообщает отладчику о необходимости подключения к удаленному компьютеру с помощью другого исполняемого файла в качестве канала, который будет пересылать стандартный ввод и вывод между Visual Studio \nи отладчиком с поддержкой MI (например, gdb).",
                "properties": {
                  "pipeCwd": {
                    "type": "string",
                    "description": "Полный путь к рабочему каталогу для программы канала."
                  },
                  "pipeProgram": {
                    "type": "string",
                    "description": "Полная команда канала для выполнения."
                  },
                  "pipeArgs": {
                    "type": "array",
                    "description": "Аргументы командной строки, переданные в программу канала для настройки подключения.",
                    "items": {
                      "type": "string"
                    }
                  },
                  "debuggerPath": {
                    "type": "string",
                    "description": "Полный путь к отладчику на конечном компьютере, например: /usr/bin/gdb."
                  },
                  "pipeEnv": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Переменные среды, переданные в программу канала."
                  },
                  "quoteArgs": {
                    "type": "boolean",
                    "description": "Задайте необходимость заключения в кавычки отдельных аргументов, содержащих символы (такие как пробелы или знаки табуляции). Если значение — \"false\", команда отладчика больше не будет заключаться в кавычки автоматически. \nЗначение по умолчанию: \"true\"."
                  }
                }
              },
              "sourceFileMapOptions": {
                "type": "object",
                "properties": {
                  "editorPath": {
                    "type": "string",
                    "description": "Расположение исходного кода для поиска редактором."
                  },
                  "useForBreakpoints": {
                    "type": "boolean",
                    "description": "При задании точек останова следует использовать это сопоставление источников. \nЕсли значение — \"false\", для задания точек останова используется только имя файла и номер строки. \nЕсли значение — \"true\", точки останова будут задаваться с помощью полного пути к имени файла и номера строки, только если используется это сопоставление источников. В противном случае при задании точек останова будут использоваться только имя файла и номер строки. \nЗначение по умолчанию: \"true\"."
                  }
                }
              }
            }
          },
          "cppTemplateLayout": {
            "allOf": [
              {
                "$ref": "#/definitions/default"
              },
              {
                "$ref": "#/definitions/cpp_schema"
              }
            ]
          }
        },
        "configuration": "#/definitions/cppTemplateLayout"
      }
    }
  }
}