Отладчик Голанга не работает - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь настроить VS Code с помощью Go и получаю сообщение об ошибке при подключении отладчика. Поскольку я новичок в VS Code, у меня нет сведений о том, почему.

Я установил отладчик delve:

go get -u github.com/derekparker/delve/cmd/dlv
delv -v 
delv 9.11.3-1ubuntu1.1-Ubuntu

Я получаю эту ошибку, когда пытаюсь присоединить отладчик к очень простому файлу golang:

API server listening at: 127.0.0.1:2345
time="2018-08-30T09:39:57-06:00" level=info msg="launching process with args: [/home/craig/Documents/GoLang/src/github.com/mornindew/sharedPackages/email/debug]" layer=debugger
Can not debug non-main package
Process exiting with code: 1

Код:

package email

import "fmt"

// SendEmail - Sends The email
func SendEmail() {

}

func main() {
    fmt.Println("Hello World!")
    i := 101
    fmt.Println(i)
}

Это все очень полезно, большое спасибо.

Это заставляет меня думать, что у меня есть проблема в моей организации проекта. У меня есть проект, который имеет кучу пакетов многократного использования. Я не хотел создавать репозиторий github для каждого отдельного пакета. По существу:

package1
-- package1.go
-- package1_test.go
package2
-- package2.go
-- package2_test.go
...
package10
-- package10.go
-- package10_test.go

Это неправильно структурировано? Есть ли рекомендуемый способ сделать это?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Ошибка в том, что вы пытаетесь отладить не основной пакет. Отладка файла из основного пакета, если у вас есть настройки для отладки файла с основной функцией. В противном случае вы можете создать настройки для отладки всего пакета. Но для вашей проблемы просто измените имя пакета на

package main

import "fmt"

// SendEmail - Sends The email
func SendEmail() {

}

func main() {
    fmt.Println("Hello World!")
    i := 101
    fmt.Println(i)
}

или Запустите отладчик из основного пакета с основной функцией. Для отладки всего рабочего пространства измените настройки в launch.json на:

{
    "name": "Remote",
    "type": "go",
    "request": "launch",
    "mode": "remote",
    "remotePath": "${workspaceRoot}",
    "port": 2345,
    "host": "127.0.0.1",
    "program": "${workspaceRoot}",
    "env": {}
}
0 голосов
/ 30 августа 2018

Как следует из ошибки, вы можете только отладить пакет main (пакет с именем main), в частности, потому что вы можете только запустить пакет main. В Go отправной точкой двоичного файла является функция с именем main() в пакете с именем main. В вашем коде есть функция с именем main(), но она находится в пакете с именем email, который не может быть встроен в программу и поэтому не может быть отлажен.

Это описано на первой странице тура Го: https://tour.golang.org/basics/1

Программы запускаются в пакете main.

Как и в спецификации: https://golang.org/ref/spec#Program_execution

Полная программа создается путем связывания одного не импортированного пакета, называемого main package , со всеми пакетами, которые она импортирует, транзитивно. Основной пакет должен иметь имя пакета main и объявлять функцию main, которая не принимает аргументов и не возвращает значения.

...