cogentcore / core

A free and open source framework for building powerful, fast, and elegant 2D and 3D apps that run on macOS, Windows, Linux, iOS, Android, and the Web with a single pure Go codebase, allowing you to Code Once, Run Everywhere.
http://cogentcore.org/core
BSD 3-Clause "New" or "Revised" License
1.31k stars 71 forks source link

treeView demo panic #927

Closed ddkwork closed 4 months ago

ddkwork commented 4 months ago

Describe the bug

nil point

How to reproduce

see png

Example code

No response

Relevant output

Crash log saved in C:\Users\Admin\AppData\Roaming\Cogent Core Tree View Demo\crash-logs

Platform: Windows
System platform: Windows
App version: dev
Core version: dev
Time: 2024-03-04 22:56:57

panic: runtime error: invalid memory address or nil pointer dereference

goroutine 21 [running]:
runtime/debug.Stack()
    C:/Program Files/Go/src/runtime/debug/stack.go:24 +0x5e
cogentcore.org/core/gi.HandleRecover({0x7ff7d2142b20, 0x7ff7d20617d0})
    C:/Users/Admin/Desktop/core/gi/recover.go:37 +0x6c
cogentcore.org/core/gi.(*RenderWin).EventLoop.func1()
    C:/Users/Admin/Desktop/core/gi/renderwin.go:555 +0x24
panic({0x7ff7d2142b20?, 0x7ff7d20617d0?})
    C:/Program Files/Go/src/runtime/panic.go:770 +0x132
cogentcore.org/core/gi.(*WidgetBase).RunStylers(0xc000421508)
    C:/Users/Admin/Desktop/core/gi/style.go:183 +0xe3
cogentcore.org/core/gi.(*WidgetBase).ApplyStyleWidget(0xc000421508)
    C:/Users/Admin/Desktop/core/gi/style.go:106 +0x8f
cogentcore.org/core/giv.(*TreeView).ApplyStyle(0xc000421508)
    C:/Users/Admin/Desktop/core/giv/treeview.go:552 +0x7c
cogentcore.org/core/gi.(*WidgetBase).Update.func1({0x7ff7d269a038, 0xc000421508}, 0x7ff7d266c250?)
    C:/Users/Admin/Desktop/core/gi/render.go:338 +0x34
cogentcore.org/core/gi.(*WidgetBase).Update.(*WidgetBase).WidgetWalkPre.func2({0x7ff7d26875a8?, 0xc000421508?})
    C:/Users/Admin/Desktop/core/gi/widget.go:535 +0xab
cogentcore.org/core/ki.(*Node).WalkPre(0xc000421508, 0xc00097be20)
    C:/Users/Admin/Desktop/core/ki/node.go:885 +0x1bf
cogentcore.org/core/gi.(*WidgetBase).WidgetWalkPre(...)
    C:/Users/Admin/Desktop/core/gi/widget.go:530
cogentcore.org/core/gi.(*WidgetBase).Update(0xc000421508)
    C:/Users/Admin/Desktop/core/gi/render.go:336 +0x1aa
cogentcore.org/core/giv.(*StructView).ConfigStructGrid.func8({0x7ff7d2681b78, 0xc0053f55e0})
    C:/Users/Admin/Desktop/core/giv/structview.go:354 +0xb0
cogentcore.org/core/events.(*Listeners).Call(0xc00099de88, {0x7ff7d2681b78, 0xc0053f55e0}, {0x0, 0x0, 0xe0?})
    C:/Users/Admin/Desktop/core/events/listeners.go:52 +0xfd
cogentcore.org/core/giv.(*ValueBase).HandleEvent(0x0?, {0x7ff7d2681b78?, 0xc0053f55e0?})
    C:/Users/Admin/Desktop/core/giv/value.go:650 +0x138
cogentcore.org/core/giv.(*ValueBase).Send(0xc00099ddc0, 0x24, {0x0?, 0x0?, 0xc0011eca88?})
    C:/Users/Admin/Desktop/core/giv/value.go:639 +0x85
cogentcore.org/core/giv.(*ValueBase).SendChange(...)
    C:/Users/Admin/Desktop/core/giv/value.go:622
cogentcore.org/core/giv.(*SliceInlineValue).ConfigWidget.func1({0x7ff7d21457a0?, 0xc0011c2cc0?})
    C:/Users/Admin/Desktop/core/giv/values.go:590 +0x25
cogentcore.org/core/events.(*Listeners).Call(0xc0011ed308, {0x7ff7d2681b78, 0xc0053f5500}, {0xc0000378a0, 0x1, 0x7ff7d175f9ba?})
    C:/Users/Admin/Desktop/core/events/listeners.go:52 +0xfd
cogentcore.org/core/gi.(*WidgetBase).HandleEvent(0xc0011eca88, {0x7ff7d2681b78, 0xc0053f5500})
    C:/Users/Admin/Desktop/core/gi/events.go:255 +0x25d
cogentcore.org/core/gi.(*WidgetBase).Send(0xc0011eca88, 0x24, {0x0, 0x0, 0xc000037970?})
    C:/Users/Admin/Desktop/core/gi/events.go:190 +0x107
cogentcore.org/core/gi.(*WidgetBase).SendChange(...)
    C:/Users/Admin/Desktop/core/gi/events.go:197
cogentcore.org/core/giv.(*SliceViewInline).SetChanged(...)
    C:/Users/Admin/Desktop/core/giv/sliceviewinline.go:223
cogentcore.org/core/giv.(*SliceViewInline).SliceNewAt(0xc0011eca88, 0xffffffffffffffff)
    C:/Users/Admin/Desktop/core/giv/sliceviewinline.go:240 +0xd7
cogentcore.org/core/giv.(*SliceViewInline).OnInit.(*SliceViewInline).SetStyles.func2.2({0x7ff7d21457a0?, 0xc000d8a7e0?})
    C:/Users/Admin/Desktop/core/giv/sliceviewinline.go:72 +0x1e
cogentcore.org/core/events.(*Listeners).Call(0xc0001b72f8, {0x7ff7d2681b78, 0xc0053f5420}, {0xc000037a58, 0x1, 0x7ff7d175f9ba?})
    C:/Users/Admin/Desktop/core/events/listeners.go:52 +0xfd
cogentcore.org/core/gi.(*WidgetBase).HandleEvent(0xc0001b6a88, {0x7ff7d2681b78, 0xc0053f5420})
    C:/Users/Admin/Desktop/core/gi/events.go:254 +0x216
cogentcore.org/core/gi.(*WidgetBase).Send(0xc0001b6a88, 0x5, {0xc00097ac10, 0x1, 0x7ff7d182a701?})
    C:/Users/Admin/Desktop/core/gi/events.go:190 +0x107
cogentcore.org/core/gi.(*EventMgr).HandlePosEvent(0xc00041aa50, {0x7ff7d26818f8, 0xc0055376c0})
    C:/Users/Admin/Desktop/core/gi/eventmgr.go:431 +0x1f44
cogentcore.org/core/gi.(*EventMgr).HandleEvent(0xc00041aa50, {0x7ff7d26818f8, 0xc0055376c0})
    C:/Users/Admin/Desktop/core/gi/eventmgr.go:159 +0x5a
cogentcore.org/core/gi.(*Stage).MainHandleEvent(0xc00031ed88, {0x7ff7d26818f8, 0xc0055376c0})
    C:/Users/Admin/Desktop/core/gi/mainstage.go:350 +0x165
cogentcore.org/core/gi.(*StageMgr).MainHandleEvent(0xc000cb2038, {0x7ff7d26818f8, 0xc0055376c0})
    C:/Users/Admin/Desktop/core/gi/mainstage.go:358 +0x6e
cogentcore.org/core/gi.(*RenderWin).HandleEvent(0xc000cb2000, {0x7ff7d26818f8, 0xc0055376c0})
    C:/Users/Admin/Desktop/core/gi/renderwin.go:608 +0x15e
cogentcore.org/core/gi.(*RenderWin).EventLoop(0xc000cb2000)
    C:/Users/Admin/Desktop/core/gi/renderwin.go:569 +0x125
created by cogentcore.org/core/gi.(*RenderWin).GoStartEventLoop in goroutine 1
    C:/Users/Admin/Desktop/core/gi/renderwin.go:523 +0xa5

Platform

Windows

ddkwork commented 4 months ago
{FF5C898E-DE1C-47b5-BE5F-B5EA1719531A}
ddkwork commented 4 months ago

fix code:

func (wb *WidgetBase) RunStylers() {
    for _, s := range wb.FirstStylers {
        if s == nil {
            continue
        }
        s(&wb.Styles)
    }
    for _, s := range wb.Stylers {
        if s == nil {
            continue
        }
        s(&wb.Styles)
    }
    for _, s := range wb.FinalStylers {
        if s == nil {
            continue
        }
        s(&wb.Styles)
    }
}
ddkwork commented 4 months ago

Or change the field FirstStylers []func(s styles.Style) of struct WidgetBase to FirstStylers []func(s styles.Style)error so that we know where the null pointer is coming from, and after half a day of debugging I still don't know where it's coming from! nil

kkoreilly commented 4 months ago

This is a duplicate of #917, which I am currently working on fixing. I know the cause of this issue and have a plan for fixing it. You do not need to debug it.

ddkwork commented 3 months ago

Ok