UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CrashDescription.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "CoreMinimal.h"
9#include "HAL/Platform.h"
10#include "Misc/CString.h"
11#include "Misc/EngineVersion.h"
12#include "Templates/Function.h"
13#include "XmlFile.h"
14#include "XmlNode.h"
15
16#if WITH_CRASHREPORTER
17#include "CrashDebugHelper.h"
18#endif
19
20enum class ECrashDescVersions : int32;
21enum class ECrashDumpMode : int32;
22class FXmlNode;
25
27/*
28 "CrashVersion"
29 "ProcessId"
30 "CrashGUID"
31 "IsInternalBuild"
32 "IsPerforceBuild"
33 "IsSourceDistribution"
34 "IsEnsure"
35 "SecondsSinceStart"
36 "GameName"
37 "ExecutableName"
38 "BuildConfiguration"
39 "PlatformName"
40 "PlatformNameIni"
41 "PlatformFullName"
42 "EngineMode"
43 "EngineModeEx"
44 "EngineVersion"
45 "BuildVersion"
46 "CommandLine"
47 "LanguageLCID"
48 "AppDefaultLocale"
49 "IsUERelease"
50 "UserName"
51 "BaseDir"
52 "RootDir"
53 "MachineId"
54 "LoginId"
55 "EpicAccountId"
56 "CallStack"
57 "SourceContext"
58 "UserDescription"
59 "UserActivityHint"
60 "ErrorMessage"
61 "CrashDumpMode"
62 "CrashReporterMessage"
63 "Misc.NumberOfCores"
64 "Misc.NumberOfCoresIncludingHyperthreads"
65 "Misc.Is64bitOperatingSystem"
66 "Misc.CPUVendor"
67 "Misc.CPUBrand"
68 "Misc.PrimaryGPUBrand"
69 "Misc.OSVersionMajor"
70 "Misc.OSVersionMinor"
71 "Misc.AppDiskTotalNumberOfBytes"
72 "Misc.AppDiskNumberOfFreeBytes"
73 "MemoryStats.TotalPhysical"
74 "MemoryStats.TotalVirtual"
75 "MemoryStats.PageSize"
76 "MemoryStats.TotalPhysicalGB"
77 "MemoryStats.AvailablePhysical"
78 "MemoryStats.AvailableVirtual"
79 "MemoryStats.UsedPhysical"
80 "MemoryStats.PeakUsedPhysical"
81 "MemoryStats.UsedVirtual"
82 "MemoryStats.PeakUsedVirtual"
83 "MemoryStats.bIsOOM"
84 "MemoryStats.OOMAllocationSize"
85 "MemoryStats.OOMAllocationAlignment"
86 "TimeofCrash"
87 "bAllowToBeContacted"
88 */
89
94
99
104
107{
109
110protected:
113
114public:
116 FCrashProperty& operator=(const FString& NewValue);
117
119 FCrashProperty& operator=(const TCHAR* NewValue);
120
122 FCrashProperty& operator=(const TArray<FString>& NewValue);
123
125 FCrashProperty& operator=(const bool NewValue);
126
128 FCrashProperty& operator=(const int64 NewValue);
129
131 const FString& AsString() const;
132
134 bool AsBool() const;
135
137 int64 AsInt64() const;
138
139protected:
142
144 mutable FString CachedValue;
145
148
151
152 mutable bool bSet;
153};
154
156{
160
161#if WITH_CRASHREPORTER
164#endif
165
166protected:
169
170protected:
173
176
179
180 mutable bool bSet;
181};
182
185{
186 friend struct FCrashProperty;
188
191
194
196 FString CrashGUID;
197
204 FString GameName;
205
211
218 FString EngineMode;
219
225
231
239
250
258
265 FString BaseDir;
266
274
282
290
298
305
306 /*
307 * A hash representing a unique id for a portable callstack. These will be specific to the CL version of the application
308 * @PCallStackHash varchar(160)
309 *
310 */
312
313 /*
314 * The signal that was raised to enter the crash handler
315 */
317
322
329
335
341
348
354
361
368
376
379
387
394
400
405
410
416
422
425
430
435
439 FString CrashType;
440
445
450
455
459 bool bIsOOM;
460
465
470
475
481
482protected:
485
488 {
489 delete XmlFile;
490 }
491
492public:
495 {
497 }
498
503 {
504 return Singleton;
505 }
506
510 static bool IsValid()
511 {
512 return Singleton != nullptr;
513 }
514
516 static void Shutdown();
517
519 bool HasProcessedData() const
520 {
521 return CallStack.AsString().Len() > 0 && ErrorMessage.AsString().Len() > 0;
522 }
523
525 void UpdateIDs();
526
529
531 void SendPostUploadAnalytics(double Duration, bool bResult, int32 ResponseCode, uint32 PayloadSize, uint32 ReportCount);
532
534 void Save();
535
536protected:
538 void ReadXML( const FString& CrashContextFilepath, const TCHAR* Buffer = nullptr );
539
541 void SetCrashGUID( const FString& Filepath );
542
544 template <typename Type>
545 void GetCrashProperty( Type& out_ReadValue, const FString& MainCategory, const FString& SecondCategory ) const
546 {
547 if (XmlFile->IsValid())
548 {
549 const FXmlNode* MainNode = XmlFile->GetRootNode()->FindChildNode( MainCategory );
550 if (MainNode)
551 {
552 const FXmlNode* CategoryNode = MainNode->FindChildNode( SecondCategory );
553 if (CategoryNode)
554 {
556 }
557 }
558 }
559 }
560
562 template <typename Type>
563 void SetCrashProperty( const FString& MainCategory, const FString& SecondCategory, const Type& Value )
564 {
565 SetCrashProperty( MainCategory, SecondCategory, *TTypeToString<Type>::ToString( Value ) );
566 }
567
569 void SetCrashProperty( const FString& MainCategory, const FString& SecondCategory, const FString& NewValue )
570 {
571 if (XmlFile->IsValid())
572 {
573 FXmlNode* MainNode = XmlFile->GetRootNode()->FindChildNode( MainCategory );
574 if (MainNode)
575 {
576 FXmlNode* CategoryNode = MainNode->FindChildNode( SecondCategory );
577 FString EscapedValue;
579 if (CategoryNode)
580 {
581 CategoryNode->SetContent( EscapedValue );
582 }
583 else
584 {
585 MainNode->AppendChildNode( SecondCategory, EscapedValue );
586 }
587 }
588 }
589 }
590
592 void SetCrashProperty(const FString& MainCategory, const FString& SecondCategory, const FXmlNode* NewNode)
593 {
594 if (XmlFile->IsValid())
595 {
597 if (MainNode)
598 {
599 FXmlNode* CategoryNode = MainNode->FindChildNode(SecondCategory);
600 const FString& Content = NewNode->GetContent();
601
602 if(!CategoryNode) // can only add.
603 {
604 TFunction<void(FXmlNode*, const FXmlNode*)> AppendNode;
605 AppendNode = [&AppendNode](FXmlNode* DestNode, const FXmlNode* SourceNode)
606 {
607 DestNode->AppendChildNode(SourceNode->GetTag(), SourceNode->GetContent());
608 for (const FXmlNode *SourceChild : SourceNode->GetChildrenNodes())
609 {
610 const TArray<FXmlNode *>& DestChildren = DestNode->GetChildrenNodes();
611 AppendNode(DestChildren.Last(), SourceChild);
612 }
613 };
614
615 AppendNode(MainNode, NewNode);
616 }
617 }
618 }
619 }
620
621
623 FString EncodeArrayStringAsXMLString( const TArray<FString>& ArrayString ) const;
624
626
629
631 FString XmlFilepath;
632
635};
636
646{
648 explicit FCrashContext( const FString& CrashContextFilepath );
649
651 FCrashContext(const FString& CrashContextFilepath, const TCHAR* Buffer);
652
653private:
654
656 void SetupPrimaryCrashProperties();
657};
658
661{
663 explicit FCrashWERContext( const FString& WERXMLFilepath );
664
666 void InitializeEngineVersion( const FString& BuildVersion, const FString& BranchName, uint32 BuiltFromCL );
667};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void LexFromString(ECrashDescVersions &OutValue, const TCHAR *Buffer)
Definition CrashDescription.h:90
ECrashDumpMode
Definition GenericPlatformCrashContext.h:78
ECrashDescVersions
Definition GenericPlatformCrashContext.h:65
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition EngineVersion.h:12
static CORE_API bool Parse(const FString &Text, FEngineVersion &OutVersion)
Definition EngineVersion.cpp:162
Definition XmlFile.h:26
XMLPARSER_API const FXmlNode * GetRootNode() const
Definition XmlFile.cpp:109
XMLPARSER_API bool IsValid() const
Definition XmlFile.cpp:103
Definition XmlNode.h:37
XMLPARSER_API const FXmlNode * FindChildNode(const FString &InTag) const
Definition XmlNode.cpp:56
XMLPARSER_API const FString & GetContent() const
Definition XmlNode.cpp:80
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition AnalyticsEventAttribute.h:48
Definition CrashDescription.h:646
Definition CrashDescription.h:156
FCrashPropertyXmlNode & operator=(const FXmlNode *Node)
Definition CrashDescription.cpp:105
bool bSet
Definition CrashDescription.h:180
FPrimaryCrashProperties * Owner
Definition CrashDescription.h:172
FString SecondCategory
Definition CrashDescription.h:178
FString MainCategory
Definition CrashDescription.h:175
Definition CrashDescription.h:107
FCrashProperty & operator=(const FString &NewValue)
Definition CrashDescription.cpp:33
FPrimaryCrashProperties * Owner
Definition CrashDescription.h:141
const FString & AsString() const
Definition CrashDescription.cpp:75
bool bSet
Definition CrashDescription.h:152
FString SecondCategory
Definition CrashDescription.h:150
FString CachedValue
Definition CrashDescription.h:144
bool AsBool() const
Definition CrashDescription.cpp:86
FString MainCategory
Definition CrashDescription.h:147
int64 AsInt64() const
Definition CrashDescription.cpp:91
Definition CrashDescription.h:661
void InitializeEngineVersion(const FString &BuildVersion, const FString &BranchName, uint32 BuiltFromCL)
Definition CrashDescription.cpp:731
static CORE_API FString UnescapeXMLString(const FString &Text)
Definition GenericPlatformCrashContext.cpp:1365
static CORE_API void AppendEscapedXMLString(FString &OutBuffer, FStringView Text)
Definition GenericPlatformCrashContext.cpp:1355
Definition CrashDescription.h:185
void MakeCrashEventAttributes(TArray< FAnalyticsEventAttribute > &OutCrashAttributes)
Definition CrashDescription.cpp:425
void SetCrashProperty(const FString &MainCategory, const FString &SecondCategory, const FXmlNode *NewNode)
Definition CrashDescription.h:592
FString BaseDir
Definition CrashDescription.h:265
FPrimaryCrashProperties()
Definition CrashDescription.cpp:149
FString DeploymentName
Definition CrashDescription.h:224
void SetCrashProperty(const FString &MainCategory, const FString &SecondCategory, const FString &NewValue)
Definition CrashDescription.h:569
FString CrashType
Definition CrashDescription.h:439
int32 CrashSignal
Definition CrashDescription.h:316
FCrashProperty GameSessionID
Definition CrashDescription.h:304
FCrashProperty CallStack
Definition CrashDescription.h:328
bool HasProcessedData() const
Definition CrashDescription.h:519
void SetCrashGUID(const FString &Filepath)
Definition CrashDescription.cpp:246
static void Shutdown()
Definition CrashDescription.cpp:191
FString ExecutableName
Definition CrashDescription.h:210
FString PCallStackHash
Definition CrashDescription.h:311
FString AppDefaultLocale
Definition CrashDescription.h:273
FXmlFile * XmlFile
Definition CrashDescription.h:628
FCrashProperty UserActivityHint
Definition CrashDescription.h:367
void ReadXML(const FString &CrashContextFilepath, const TCHAR *Buffer=nullptr)
Definition CrashDescription.cpp:221
static bool IsValid()
Definition CrashDescription.h:510
FCrashProperty LoginId
Definition CrashDescription.h:289
FCrashProperty FullCrashDumpLocation
Definition CrashDescription.h:378
uint32 CrashScreenshotWidth
Definition CrashDescription.h:479
void SetCrashProperty(const FString &MainCategory, const FString &SecondCategory, const Type &Value)
Definition CrashDescription.h:563
bool bIsRequestingExit
Definition CrashDescription.h:474
FCrashProperty CrashReportClientVersion
Definition CrashDescription.h:409
FCrashProperty PlatformCallbackResult
Definition CrashDescription.h:404
FString RestartCommandLine
Definition CrashDescription.h:429
void Save()
Definition CrashDescription.cpp:520
FCrashProperty bAllowToBeContacted
Definition CrashDescription.h:393
void SendPostUploadAnalytics(double Duration, bool bResult, int32 ResponseCode, uint32 PayloadSize, uint32 ReportCount)
Definition CrashDescription.cpp:389
ECrashDescVersions CrashVersion
Definition CrashDescription.h:190
int32 NumMinidumpFramesToIgnore
Definition CrashDescription.h:321
static FPrimaryCrashProperties * Get()
Definition CrashDescription.h:502
FCrashProperty TimeOfCrash
Definition CrashDescription.h:386
FCrashProperty SourceContext
Definition CrashDescription.h:347
FCrashProperty CrashReporterMessage
Definition CrashDescription.h:399
void GetCrashProperty(Type &out_ReadValue, const FString &MainCategory, const FString &SecondCategory) const
Definition CrashDescription.h:545
FString XmlFilepath
Definition CrashDescription.h:631
FCrashProperty EngineModeEx
Definition CrashDescription.h:230
~FPrimaryCrashProperties()
Definition CrashDescription.h:487
FCrashProperty EpicAccountId
Definition CrashDescription.h:297
FCrashProperty UserName
Definition CrashDescription.h:281
bool bLowMemoryWarning
Definition CrashDescription.h:464
static void Set(FPrimaryCrashProperties *NewInstance)
Definition CrashDescription.h:494
FCrashPropertyXmlNode PlatformPropertiesExtras
Definition CrashDescription.h:454
bool bIsEnsure
Definition CrashDescription.h:434
FCrashProperty ErrorMessage
Definition CrashDescription.h:375
FCrashProperty PCallStackHashProperty
Definition CrashDescription.h:340
FString EncodeArrayStringAsXMLString(const TArray< FString > &ArrayString) const
Definition CrashDescription.cpp:254
void SendPreUploadAnalytics()
Definition CrashDescription.cpp:332
FString CrashGUID
Definition CrashDescription.h:196
uint32 CrashScreenshotHeight
Definition CrashDescription.h:480
FCrashProperty CPUBrand
Definition CrashDescription.h:444
static FPrimaryCrashProperties * Singleton
Definition CrashDescription.h:634
FCrashProperty CommandLine
Definition CrashDescription.h:257
void UpdateIDs()
Definition CrashDescription.cpp:196
bool bIsOOM
Definition CrashDescription.h:459
bool bInBackground
Definition CrashDescription.h:469
FCrashProperty PCallStack
Definition CrashDescription.h:334
FCrashProperty UserDescription
Definition CrashDescription.h:360
bool bHasLogFile
Definition CrashDescription.h:421
FString GameName
Definition CrashDescription.h:204
FEngineVersion EngineVersion
Definition CrashDescription.h:249
bool bHasPrimaryData
Definition CrashDescription.h:424
FCrashProperty Modules
Definition CrashDescription.h:353
ECrashDumpMode CrashDumpMode
Definition CrashDescription.h:193
FCrashProperty PlatformFullName
Definition CrashDescription.h:238
bool bHasMiniDumpFile
Definition CrashDescription.h:415
FCrashPropertyXmlNode Threads
Definition CrashDescription.h:449
FString EngineMode
Definition CrashDescription.h:218
static UE_FORCEINLINE_HINT int32 Atoi(const CharType *String)
Definition CString.h:1173
Definition UnrealString.h:202