douou6696 2019-03-15 08:20
浏览 229

使用gdb调试禁用优化后,golang仍进行了优化

My main.go:

package main

import "fmt"
// main
func main() {
    fmt.Println("hello")
}

Build it:

go build -o main -gcflags '-N -l'

Hit breakpoint:

gdb main    
b runtime.(*mheap).sysAlloc
r

At line 540, i print v, it gives me "optimized out".
At line 549 print hint, it gives me: No symbol "hint" in current context.
What strange is that i can print *h.arenaHints value which infers hint.down is false, but line 550 still be steped into.

535 func (h *mheap) sysAlloc(n uintptr) (v unsafe.Pointer, size uintptr) {
536     n = round(n, heapArenaBytes)
537 
538     // First, try the arena pre-reservation.
539     v = h.arena.alloc(n, heapArenaBytes, &memstats.heap_sys)
540     if v != nil {
541         size = n
542         goto mapped
543     }
544 
545     // Try to grow the heap at a hint address.
546     for h.arenaHints != nil {
547         hint := h.arenaHints
548         p := hint.addr
549         if hint.down {
550             p -= n
551         }

So why disable optimization failed? Why line 550 can be steped into?

Env:
golang 1.12
ubuntu 18.04

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 手机连接电脑热点显示无ip分配
    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办
    • ¥15 kylin启动报错log4j类冲突
    • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大