MrDuk
MrDuk

Reputation: 18242

Why doesn't my Go debugger load all symbols, causing local variables to be missing from the debugger?

I've built my binary with: go build -gcflags "$gc_flags" -o ./bin/grafana-server ./pkg/cmd/grafana-server, where $gc_flags is '-N -l'.

When I run this file, ./bin/grafana-server, and attach to it in my debugger (Goland), not all of my symbols are loaded. Further, some breakpoints display the message:

no code at /Users/.../file.go:186

The code I'd like to debug is below:

enter image description here

The section I've added to the original project is lines 186-199. What you can see is that the execution has made it into the for _, .. loop (line 196), indicating that query has data, and we were able to pull data from the database using that query via repo.Find(query). However, query is nowhere to be found in my debugger:

enter image description here

So I'm unsure what's going on at this point. I'm really really new to golang unfortunately; this is making it incredibly difficult for me to make any progress.

Upvotes: 9

Views: 3699

Answers (1)

dlsniper
dlsniper

Reputation: 7477

When using Go 1.10 or newer, in order to have a better debugging experience and remove the optimizations the compiler does, you need to build the target application using -gcflags="all=-N -l".

Before Go 1.10, you need to use -gcflags="-N -l".

The IDE adds these flags automatically when compiling an application for debugging.

Upvotes: 15

Related Questions