View Issue Details

IDProjectCategoryView StatusLast Update
0004677NoesisGUIStudiopublic2026-01-07 17:15
Reportermaherne Assigned Tosfernandez  
PrioritynormalSeveritycrash 
Status resolvedResolutionfixed 
Product VersionStudio_Beta 
Target VersionStudio_BetaFixed in VersionStudio_Beta 
Summary0004677: [BS2006] Crash when clearing GridView Columns
Description

Reproduction for crash BS2006/BS2008: https://app.bugsplat.com/v2/group?database=Noesis&stackKeyId=778&timeFrameKey=All&utc=false
Also related to BS2007, which is caused by trying to remove an item, rather than clear the collection: https://app.bugsplat.com/v2/crash?database=Noesis&id=2007

See attached video for reproduction steps.

Crash occurs due to NotifyCollectionChangedEventArgs::newValue being nullptr in BaseGridViewRowPresenter, line 138.

case NotifyCollectionChangedAction_Replace:
{
    GridViewColumn* oldColumn = (GridViewColumn*)e.oldValue;
    oldColumn->ActualWidthChanged() -= MakeDelegate(this,
        &BaseGridViewRowPresenter::OnColumnActualWidthChanged);
    GridViewColumn* newColumn = (GridViewColumn*)e.newValue;
    newColumn->ActualWidthChanged() += MakeDelegate(this,
        &BaseGridViewRowPresenter::OnColumnActualWidthChanged);
    break;
}

Call stack:

App.StudioTool.exe!Noesis::BaseGridViewRowPresenter::OnColumnsCollectionChanged(Noesis::BaseComponent * sender, const Noesis::NotifyCollectionChangedEventArgs & e) Line 184
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Controls\Src\BaseGridViewRowPresenter.cpp(184)
App.StudioTool.exe!Noesis::DelegateImpl<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::MemberFuncStub<Noesis::BaseGridViewRowPresenter,void (__cdecl Noesis::BaseGridViewRowPresenter::*)(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::Invoke(const void * this_, Noesis::BaseComponent * && <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 391
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(391)
App.StudioTool.exe!Noesis::DelegateImpl<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::Base::Invoke(Noesis::BaseComponent * && <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 86
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(86)
App.StudioTool.exe!Noesis::Delegate<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::operator()(Noesis::BaseComponent * <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 737
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(737)
App.StudioTool.exe!Noesis::Delegate<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::Invoker::Invoke(unsigned int i, Noesis::BaseComponent * <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 766
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(766)
App.StudioTool.exe!Noesis::DelegateImpl<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::MultiDelegate::Invoke(const Noesis::DelegateImpl<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::MultiDelegate * this_, Noesis::BaseComponent * && <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 476
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(476)
App.StudioTool.exe!Noesis::DelegateImpl<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::Base::Invoke(Noesis::BaseComponent * && <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 83
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(83)
App.StudioTool.exe!Noesis::Delegate<void __cdecl(Noesis::BaseComponent *,Noesis::NotifyCollectionChangedEventArgs const &)>::operator()(Noesis::BaseComponent * <args_0>, const Noesis::NotifyCollectionChangedEventArgs & <args_1>) Line 737
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Core\Kernel\Include\NsCore\Delegate.inl(737)
App.StudioTool.exe!Noesis::BaseFreezableCollection::RemoveItem(unsigned int index) Line 271
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Core\Src\BaseFreezableCollection.cpp(271)
App.StudioTool.exe!Noesis::BaseFreezableCollection::RemoveAt(unsigned int index) Line 190
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Core\Src\BaseFreezableCollection.cpp(190)
App.StudioTool.exe!RemoveCollectionItemImpl(Editor::TextEditor * textEditor, Noesis::NodeObject * node, const Noesis::DependencyProperty * dp, const Noesis::TypeProperty * rp, unsigned int itemIndex, Noesis::Vector<Editor::IMemento *,0> & mems) Line 696
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\MementoUtils.cpp(696)
App.StudioTool.exe!Editor::MementoUtils::RemoveObjectPropertyCollectionItem(Editor::TextEditor * textEditor, Noesis::NodeObject * node, Noesis::Symbol propOwner, Noesis::Symbol prop, unsigned int itemIndex, Noesis::Vector<Editor::IMemento *,0> & mems) Line 722
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\MementoUtils.cpp(722)
App.StudioTool.exe!Editor::RemoveCollectionItemCommand::Execute() Line 104
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\RemoveCollectionItemCommand.cpp(104)
App.StudioTool.exe!Editor::CollectionProperty::RemoveItemCommand(const Editor::PropertyUpdateRequest & req, int idx) Line 1723
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\CollectionProperty.cpp(1723)
App.StudioTool.exe!Editor::CollectionProperty::SerializeListValue(Noesis::IList * list) Line 1372
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\CollectionProperty.cpp(1372)
App.StudioTool.exe!Editor::CollectionProperty::ClearValueCommand() Line 522
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\CollectionProperty.cpp(522)
App.StudioTool.exe!Editor::Property::ClearValue(Noesis::BaseComponent * __formal) Line 1680
    at D:\Source\Noesis\NoesisStudio_Dev\NoesisSDK\Native\Src\Packages\Gui\Studio\Src\Property.cpp(1680)
PlatformAny

Activities

sfernandez

sfernandez

2026-01-07 17:15

manager   ~0011679

Fixed in changeset r16470

Issue History

Date Modified Username Field Change
2026-01-07 17:02 maherne New Issue
2026-01-07 17:02 maherne File Added: GridViewCrash 2026-01-07 15-56-02.mp4
2026-01-07 17:03 maherne Target Version => Studio_Beta
2026-01-07 17:06 maherne Description Updated
2026-01-07 17:14 sfernandez Assigned To => sfernandez
2026-01-07 17:14 sfernandez Status new => assigned
2026-01-07 17:14 sfernandez File Deleted: GridViewCrash 2026-01-07 15-56-02.mp4
2026-01-07 17:15 sfernandez Status assigned => resolved
2026-01-07 17:15 sfernandez Resolution open => fixed
2026-01-07 17:15 sfernandez Fixed in Version => Studio_Beta
2026-01-07 17:15 sfernandez Note Added: 0011679