A crash can occur when a member of a UStruct has a category with the "|" symbol and is trying to be displayed inside by the FDetailLayoutBuilderImpl class.
This happens when there is a UStruct member that has a subcategory. Example: UPROPERTY(Category="ParentCat|ChildCategory")
When these types of properties are displayed in a DetailsView, if any member is tickable, a FDetailTreeNode* member is created. For some reason, this tickable members can turn invalid, and this only happens in members that are inside subcategories. The data structure that manages this behavior is FDetailLayoutBuilderImpl::TickableNodes. The crash occurs inside FDetailLayoutBuilderImpl::Tick, as some nodes inside TickableNodes turn invalid.
With repro project:
1. Open the Repro project
2. Run the EditorUtilityWidget called EUMG_EditTestObject
Without Repro Project:
1- Create the mentioned UStruct with subcategories.
2- Display it inside a UPropertyViewBase object or a derived one like UDetailsView.
PureCallHandler() WindowsPlatformMisc.cpp:732
FDetailLayoutBuilderImpl::Tick(float) DetailLayoutBuilderImpl.cpp:1064
SDetailsViewBase::Tick(const FGeometry &, const double, const float) SDetailsViewBase.cpp:1318
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1445
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SBorder::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SBorder.cpp:131
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SObjectWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SObjectWidget.cpp:140
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SBorder::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SBorder.cpp:131
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SBorder::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SBorder.cpp:131
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33
SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46
SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579
SWindow::PaintSlowPath(const FSlateInvalidationContext &) SWindow.cpp:2081
FSlateInvalidationRoot::PaintInvalidationRoot(const FSlateInvalidationContext &) SlateInvalidationRoot.cpp:411
SWindow::PaintWindow(double, float, FSlateWindowElementList &, const FWidgetStyle &, bool) SWindow.cpp:2120
FSlateApplication::DrawWindowAndChildren(const TSharedRef<…> &, FDrawWindowArgs &) SlateApplication.cpp:1177
FSlateApplication::PrivateDrawWindows(TSharedPtr<…>) SlateApplication.cpp:1419
FSlateApplication::DrawWindows() SlateApplication.cpp:1121
FSlateApplication::TickAndDrawWidgets(float) SlateApplication.cpp:1721
FSlateApplication::Tick(ESlateTickType) SlateApplication.cpp:1574
FEngineLoop::Tick() LaunchEngineLoop.cpp:5994
[Inlined] EngineTick() Launch.cpp:69
GuardedMain(const wchar_t *) Launch.cpp:190
LaunchWindowsStartup(HINSTANCE__ *, HINSTANCE__ *, char *, int, const wchar_t *) LaunchWindows.cpp:266
WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) LaunchWindows.cpp:317
I am not able to find world outliner how to enable it?
What method is used to fill polygonal regions when drawing spline mesh at run time?
How does TextureRenderTarget2D get TArray<uint8> type data?
How to achieve HLSL Multiple Render Target in Material blueprints?
How does UMG set overlapping layouts?
How can PaintContext be used as function parameter in OnPaint?
What property of the Slider is the image used when dragging?
What properties of the progress bar can be used for drag and drop highlighting?
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-232029 in the post.
0 |
Component | UE - Editor - Workflow Systems |
---|---|
Affects Versions | 5.4, 5.3, 5.5 |
Created | Dec 3, 2024 |
---|---|
Updated | Dec 5, 2024 |