繁体   English   中英

Goland调试器的问题

[英]Problems with Goland's Debugger

我在Golang中有一个奇怪的错误。

操作系统:Linux Ubuntu 18.04。

CPU:具有64位支持的AMD。

IDE是Goland 2018.1.5。

Go版本为1.10.1。

编译器设置为:“任何”。

我已经尝试了'gc'和'gccgo'编译器。 结果是一样的。

在下面的程序中,调试器显示了奇怪的事情。 “ aUnion”变量内部带有“ John”,但是其中具有Union类型的“ aRecord”变量内部没有“ John”。

如果我“ fmt.Printf”他们,他们都在那里,但调试器显示“ aRecord”中没有约翰。 那是调试器的错误吗?

该程序非常简单。 只是嵌套结构作为指针传递。

    // 33.go.

    package main

    import "fmt"

    type Person struct {
        Name string
        Age  int
    }
    type GroupOfPeople struct {
        Name   string
        People []*Person
    }
    type Union struct {
        ID    int
        Group *GroupOfPeople
    }
    type Record struct {
        UnionField *Union
        Type       int
    }

    func main() {

        var aPerson *Person
        var people []*Person
        var aGroup *GroupOfPeople
        var aUnion *Union
        var aRecord *Record

        aPerson = &Person{
            Name: "John",
            Age:  10,
        }
        people = []*Person{aPerson}
        aGroup = &GroupOfPeople{
            Name:   "A Group",
            People: people,
        }
        aUnion = &Union{
            ID:    123,
            Group: aGroup,
        } // John is inside 'aUnion'.
        aRecord = &Record{
            UnionField: aUnion,
            Type:       666,
        }
        // John is NOT inside 'aRecord'.
        // WHY ?!
        fmt.Printf("aUnion: %+v.\r\n", aUnion.Group.People[0])
        fmt.Printf("aRecord: %+v.\r\n", aRecord.UnionField.Group.People[0])
    }

谢谢你的帮助!

这是GoLand在运行时如何处理这些变量的值嵌套的问题。

我创建此问题来跟踪和修复它。

同时,您可以使用“监视”功能来监视“ aRecord.UnionField.Group.People”作为示例,然后它将正确显示这些值。 抱歉给你带来不便。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM