< Сильный > Ответ: Основываясь на ответе пута, я выяснил следующую конфигурацию для сборки и отладки одним щелчком мыши

Сначала вам нужно добавить задачу для сборки двоичного файла с соответствующими тегами.

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "0.1.0",
  "command": "bash",
  "isShellCommand": true,
  "args": [""],
  "showOutput": "always",
  "tasks": [
        {
            "taskName": "buildBinWithTag",
            "command": "go",
            "args": ["build", "-o", "BinaryName", "-tags", "THISISATAG"],
            "isShellCommand": true            
        }       
    ]
}

Эта задача должна быть выполнена до запуска отладчика.

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "DebugBinWithTag",    //added config
      "type": "go",
      "request": "launch",
      "mode": "exec",
      "remotePath": "",
      "port": 2345,
      "host": "127.0.0.1",
      "program": "${workspaceRoot}/BinaryName",
      "env": {},
      "args": [],
      "showLog": true,
      "preLaunchTask": "buildBinWithTag"
    }
  ]
} 

Оригинальный вопрос : я использую теги сборки для компиляции разных версий программы Go и компилирую их с помощью команды "go build -tags THISISAFLAG"

//+build THISISAFLAG

package main

Это работает отлично. Но есть ли способ сказать отладчику использовать эти флаги. Я пытался использовать конфигурацию запуска, как показано ниже, но это не сработало.

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "remotePath": "",
      "port": 2345,
      "host": "127.0.0.1",
      "program": "${fileDirname}",
      "env": {},
      "args": ["-flags THISISAFLAG"],
      "showLog": true
    }
  ]
}
3
David 24 Апр 2017 в 10:20

2 ответа

Лучший ответ

Вы можете прикрепить готовый двоичный файл к отладчику.

  1. Создайте приложение из командной строки, например, go build -o myapp.exe -tags THISISAFLAG
  2. Добавить конфигурацию Launch Exe в launch.json

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Launch Debug",  //existing config
          "type": "go",
          "request": "launch",
          "mode": "debug",
          "remotePath": "",
          "port": 2345,
          "host": "127.0.0.1",
          "program": "${fileDirname}",
          "env": {},
          "args": [],
          "showLog": true
        },
        {
          "name": "Launch EXE",    //added config
          "type": "go",
          "request": "launch",
          "mode": "exec",
          "remotePath": "",
          "port": 2345,
          "host": "127.0.0.1",
          "program": "${workspaceRoot}/myapp.exe",
          "env": {},
          "args": [],
          "showLog": true
        }
      ]
    } 
    

< Сильный > Примечание :

Из-за оптимизации компилятора и этой проблемы некоторые переменные могут не отображаться или отображаться с разными имя во время сеанса отладки (см. ниже). В будущем вы можете добавить -gcflags='-N -l' при сборке приложения, чтобы отключить оптимизацию компилятора.

enter image description here

1
putu 25 Апр 2017 в 00:11

плагин Visual Studio Code Go теперь поддерживает launch.json ключ, называемый {{X1} }, который позволяет вам указывать теги сборки с соответствующим значением "-tags Tag". (Похоже, ошибка, запрещающая использование нескольких тегов.).

Соответствующая выдержка из плагина Wiki :

Если вашей сборке нужны теги сборки (например, go build -tags what_tag), добавьте параметр buildFlags с содержимым «-tags what_tag».

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

2
jpap 1 Сен 2018 в 00:26
43582024