For completeness, this is documented in the 1.10 release notes. See the second paragraph of this section: https://golang.org/doc/go1.10#build.
On Thursday, March 15, 2018 at 3:16:37 PM UTC-4, matthe...@gmail.com wrote: > > This looks like it changed between 1.9.4 and 1.10. > > Here’s the documentation: > https://github.com/golang/go/blob/release-branch.go1.10/src/cmd/go/internal/work/build.go#L113-L127 > > I guess the package patterns thing is new. Try this: > > go build -a -x -gcflags=“all=-N -l” > > Matt > > On Thursday, March 15, 2018 at 1:52:28 PM UTC-5, Patrick Turley wrote: >> >> I build my Go project with the -N and -l options, but they only seem to >> apply to the top-most package -- imported packages are still optimized. >> From what I can tell, this is because go build isn't propagating the >> options that disable optimization as it tracks down and builds dependencies. >> >> I *claim* that: >> >> >> - If I tell go build to disable optimizations, it makes sense that >> optimizations should be disabled for *everything* it ends up building. >> >> - Therefore, this is a bug. >> >> >> I'm writing here because I'm a Go n00b, and there may be something I'm >> missing. >> >> Let me show my evidence... >> >> Consider the following trivial Go project: >> >> . >> ├── main.go >> └── help >> └── help.go >> >> >> >> Here's main.go: >> >> >> package main >> >> import "./help" >> >> func main() { >> help.Help() >> } >> >> >> >> Here's help.go: >> >> >> package help >> >> import "fmt" >> >> func Help() { >> fmt.Println("I'm helping") >> } >> >> >> >> Here's how I built the project: >> >> >> go build -gcflags="-N -l" main.go >> >> >> >> The -N option disables optimization, and the -l option disables inlining. >> >> This produced an executable called main in my current directory (as >> expected). I tried to debug this executable with delve and saw this: >> >> >> $ dlv exec main >> Type 'help' for list of commands. >> (dlv) b main.main >> Breakpoint 1 set at 0x108e83f for main.main() ./main.go:5 >> (dlv) c >> > main.main() ./main.go:5 (hits goroutine(1):1 total:1) (PC: 0x108e83f) >> 1: package main >> 2: >> 3: import "./help" >> 4: >> => 5: func main() { >> 6: help.Help() >> 7: } >> (dlv) s >> > main.main() ./main.go:6 (PC: 0x108e84b) >> 1: package main >> 2: >> 3: import "./help" >> 4: >> 5: func main() { >> => 6: help.Help() >> 7: } >> (dlv) s >> > _/Users/pturley/Workspace/Go/src/debug-problem/help.Help() >> ./help/help.go:5 (PC: 0x108e76f) >> Warning: debugging optimized function >> 1: package help >> 2: >> 3: import "fmt" >> 4: >> => 5: func Help() { >> 6: fmt.Println("I'm helping") >> 7: } >> >> >> >> Notice that main() isn't optimized (as expected), but Help() is >> optimized, and delve prints a warning about that. If, for example, >> Help() had local variables, it would be unlikely you could view their >> values. >> >> I tried building again with a few more options: >> >> >> go build -a -x -gcflags="-N -l" main.go > log 2>&1 >> >> >> >> The -a option ensures Go doesn't rely on any cached build artifacts. The >> -x option causes Go to print all commands before executing them. >> >> Here's the command that built main.go (white space inserted to improve >> clarity): >> >> >> /opt/local/lib/go/pkg/tool/darwin_amd64/compile >> -o $WORK/b001/_pkg_.a >> -trimpath $WORK/b001 >> -N -l >> -p main >> -complete >> -buildid XMSzm8g7wNG80cfFP4Nw/XMSzm8g7wNG80cfFP4Nw >> -goversion go1.10 >> -D _/Users/pturley/Workspace/Go/src/debug-problem >> -importcfg $WORK/b001/importcfg >> -pack -c=4 >> ./main.go >> >> >> >> Here's the command that built help.go: >> >> >> /opt/local/lib/go/pkg/tool/darwin_amd64/compile >> -o $WORK/b002/_pkg_.a >> -trimpath $WORK/b002 >> -p _/Users/pturley/Workspace/Go/src/debug-problem/help >> -complete >> -buildid Td3vdeSGgO-nwcrs810U/Td3vdeSGgO-nwcrs810U >> -goversion go1.10 >> -D _/Users/pturley/Workspace/Go/src/debug-problem/help >> -importcfg $WORK/b002/importcfg >> -pack -c=4 >> ./help.go >> >> >> >> Note that the -N and -l options are missing in the latter command. If >> they had been propagated by go build (which I *claim* makes the most >> sense), *all* my code would be debuggable. >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.