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

1

9

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.

Bedside answered 13/4, 2018 at 15:14 Comment(3)
From what I understand in #49805529 you are using Go 1.10+. When doing so, please use ` -gcflags="all=-N -l" ` in order to ensure that all debugged packages are properly compiled with the debug symbols on and no optimizations.Seminal
Thanks @Seminal - I never came back to say this worked for me; it worked for me.Bedside
Happy to hear this works now. I'll add this as a proper response so it can be closed as answered.Seminal
S
15

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.

Seminal answered 23/4, 2018 at 17:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.