Skip to content

Debug skipping some lines when using Step Over (F10) #3303

Open
@dicaetano

Description

@dicaetano

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
  • Run go version to get version of Go from the VS Code integrated terminal.
    • go1.22.0 darwin/amd64
  • Run gopls -v version to get version of Gopls from the VS Code integrated terminal.
    • v0.15.2
  • Run code -v or code-insiders -v to get version of VS Code or VS Code Insiders.
    • 1.87.2
  • Check your installed extensions to get the version of the VS Code Go extension
    • v0.41.2
  • Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > Go: Locate Configured Go Tools command.

Tools Configuration

Environment

GOBIN: undefined
toolsGopath:
gopath: /Users/rcaetano/go
GOROOT: /Users/rcaetano/sdk/go1.21.1
PATH: /Users/rcaetano/sdk/go1.21.1/bin:/Users/rcaetano/.pyenv/shims:/Users/rcaetano/Downloads/google-cloud-sdk/bin:/Users/rcaetano/.gvm/bin:/Users/rcaetano/.nvm/versions/node/v14.18.1/bin:/usr/local/bin:/Users/rcaetano/Library/Python/3.8/bin:/Users/rcaetano/go/bin:/Users/rcaetano/.nvm/versions/node/v14.18.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/sbin:/usr/local/go/bin:/Users/rcaetano/.fig/bin:/Users/rcaetano/.local/bin:/Users/rcaetano/go/bin/mockery
PATH (vscode launched with): /Users/rcaetano/.pyenv/shims:/Users/rcaetano/Downloads/google-cloud-sdk/bin:/Users/rcaetano/.gvm/bin:/Users/rcaetano/.nvm/versions/node/v14.18.1/bin:/usr/local/bin:/Users/rcaetano/Library/Python/3.8/bin:/Users/rcaetano/go/bin:/Users/rcaetano/.nvm/versions/node/v14.18.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/sbin:/usr/local/go/bin:/Users/rcaetano/.fig/bin:/Users/rcaetano/.local/bin:/Users/rcaetano/go/bin/mockery

Tools

go:	/Users/rcaetano/sdk/go1.21.1/bin/go: go version go1.21.1 darwin/amd64

gopls:	/Users/rcaetano/go/bin/gopls	(version: v0.15.2 built with go: go1.21.1)
gotests:	/Users/rcaetano/go/bin/gotests	(version: v1.6.0 built with go: go1.22.0)
gomodifytags:	not installed
impl:	not installed
goplay:	/Users/rcaetano/go/bin/goplay	(version: v1.0.0 built with go: go1.22.0)
dlv:	/Users/rcaetano/go/bin/dlv	(version: v1.22.1 built with go: go1.21.1)
golangci-lint:	/Users/rcaetano/go/bin/golangci-lint	(version: v1.56.2 built with go: go1.22.0)

Go env

Workspace Folder (fury_shipping-circuits-api): /Users/rcaetano/workspace/forecast/fury_shipping-circuits-api

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/Users/rcaetano/Library/Caches/go-build'
GOENV='/Users/rcaetano/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/rcaetano/go/pkg/mod'
GONOPROXY='github.com/melisource/*,github.com/mercadolibre/*'
GONOSUMDB='github.com/melisource/*,github.com/mercadolibre/*'
GOOS='darwin'
GOPATH='/Users/rcaetano/go'
GOPRIVATE='github.com/melisource/*,github.com/mercadolibre/*'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/rcaetano/sdk/go1.21.1'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/rcaetano/sdk/go1.21.1/pkg/tool/darwin_amd64'
GOVCS=''
GOVERSION='go1.21.1'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/rcaetano/workspace/forecast/fury_shipping-circuits-api/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/3h/sr1wc_pd51x2ft4fhf8kn2kwf3707j/T/go-build2089358252=/tmp/go-build -gno-record-gcc-switches -fno-common'

Share the Go related settings you have added/edited

  "go.gotoSymbol.ignoreFolders": [
    "mocks"
  ],
  "go.gotoSymbol.includeImports": true,
  "go.lintTool": "golangci-lint",
  "go.lintFlags": [
    "--fast",
    "--config=${workspaceFolder}/.code_quality/.golangci-project.yml",
    "--new-from-rev=origin/develop"
  ],
"go.testEnvFile": "${workspaceRoot}/variables.env",
"go.buildTags": "integration",
  "gopls": {
    "build.buildFlags": [
      "-tags=integration"
    ],
    "build.allowModfileModifications": true
  },

Describe the bug

When debugging, some lines of codes are sometimes skipped when using Step Over (F10). For example, in this snipped of code (replaced the real names):

func (s SomeStruct) doSomething(ctx context.Context, d *someOtherStruct) {
	entities, err := s.finder.Find(ctx, d.something)
	if err != nil {
		s.handleError(ctx, err)
		return
	}

	d.someSlice = s.doOtherStuff(ctx, d, entities)
}

When I put a breakpoint in the first line, F10 goes to if err. But if I use F10 again, it does not break in the last line, it executes it, unless I put a breakpoint in it. This happens a lot, and its quite anoying. But is not in every code.

I was not able to reproduce this behavior in a separated project to put in here. I copied the exact code (all the file), mocked all the dependencies, but used the same structs/entities, and still not reproduceble. Maybe this is related to the amount of memory used by my API (stack), and the debug makes some kind of optmizations? Just guessing.

When I use Delve directly, and only attach the debug into it, it works perfectly. So its a behavior of the extension I think.

Is this a possible bug, or an expected behavior? If the last, is there anything, some config, that I can change to try to fix it?

Steps to reproduce the behavior:

Not able to reproduce.

Metadata

Metadata

Assignees

No one assigned

    Labels

    DebugIssues related to the debugging functionality of the extension.WaitingForInfoIssue is not actionable because of missing required information, which needs to be provided.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions