V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunshinev
V2EX  ›  程序员

golang panic 不打印参数地址怎么办,是三个点

  •  
  •   sunshinev ·
    sunshinev · 2020-07-17 20:06:16 +08:00 · 1437 次点击
    这是一个创建于 1379 天前的主题,其中的信息可能已经有所发展或是发生改变。
    2020/07/17 20:01:56 0xc0000721e0 1
    panic: wtf
    
    goroutine 1 [running]:
    main.run(...)
    	/www/xx/go/test/main.go:18
    main.main()
    	/www/xx/go/test/main.go:13 +0xd0
    
    Process finished with exit code 2
    
    

    为什么 run 里面是...

    代码如下:

    func main() {
    	a := "1"
    	run(a)
    }
    
    func run(a string) {
    	log.Println(a)
    	panic("wtf")
    }
    
    
    1 条回复    2020-07-17 22:11:50 +08:00
    katsusan
        1
    katsusan  
       2020-07-17 22:11:50 +08:00
    run 函数被内联了,可以在编译时加入-gcflags "-l"禁止内联。

    ➜ /tmp go build -gcflags "-m" panic.go
    # command-line-arguments
    ./panic.go:10:6: can inline run
    ./panic.go:5:6: can inline main
    ./panic.go:7:5: inlining call to run
    ./panic.go:7:5: main ... argument does not escape
    ./panic.go:7:5: a escapes to heap
    ./panic.go:10:10: leaking param: a
    ./panic.go:11:13: run ... argument does not escape
    ./panic.go:11:13: a escapes to heap
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2922 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:17 · PVG 22:17 · LAX 07:17 · JFK 10:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.