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.

Reply via email to