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 | Jan 17, 2025 |