Commit Graph

61 Commits

Author SHA1 Message Date
Patrick Laflamme
a98b2214e3 On Windows, fixed CRC (out of process mode for Editor) generating an incomplete portable callstack when the crash occurred because a null function pointer was invoked
- When CRC runs out of process, instead of reading the current thread context of the crashed thread, read and use the crash context that was reported during the crash (which is different).
  - Added an optional context parameter to FGenericPlatformStackWalk::CaptureThreadStackBackTrace(), implemented it across all platforms, but only used on Windows.

On Windows, fixed InitStackWalking() and InitStackWalkingForProcess() to reset the process that needs to be walked.
  - CRC, running out of process may run its own process or the Editor process and which ever was walking first ruled out the other.

#jira UE-105006 - [CrashReporter] VCRUNTIME140!7fffce010000 + e390
#rb Johan.Berg
#preflight 15217159

[CL 15319737 by Patrick Laflamme in ue5-main branch]
2021-02-04 14:06:44 -04:00
Marc Audy
cac1fe0019 Merge UE5/Release-Engine-Staging @ CL# 15299266 to UE5/Main
This represents UE4/Main @ CL# 15277572

[CL 15299962 by Marc Audy in ue5-main branch]
2021-02-03 14:57:28 -04:00
geoff evans
4f72b503b8 Add Stall Detector API, enabled only for Editor builds for Windows
This code is meant to help locate and send reports/telemetry for slow code pathways that create unresponsive conditions
FGameThreadHitchHeartBeatThreaded was considered, but doesn't fit Editor's needs because its designed around general GameThread deadlines
Editor workloads are much less homogenous, and proper async support for a consistent GameThread deadline in Editor is a ways away
This necessitates a more focused approach where we can instrument specific routines such that each issue their own telemetry report
Add a "Stalls" counter in the Frame Rate and Memory title bar stats
Add LogStall Log category for viewing details about stalls that have occurred
Introduces a stall counter object on the GameThread to collect statistical data about stalls (this will not report to telemetry)
Future changes will introduce report objects into specific routines to upload to crashreporter
Future changes will introduce support for non-Windows OSes

#jira none
#rb francis.hurteau

[CL 15213394 by geoff evans in ue5-main branch]
2021-01-26 20:26:53 -04:00
Marc Audy
bc88b73a29 Merge Release-Engine-Staging to Main @ CL# 15151250
Represents UE4/Main @ 15133763

[CL 15158774 by Marc Audy in ue5-main branch]
2021-01-21 16:22:06 -04:00
Patrick Laflamme
39beb94b81 #jira UETOOL-2873 - For MTBF, account for crashes happening before analytics is initialized.
- Count number of crashes before Analytics get initialized and report them as DelayedCrashCount field of the Editor summary session event.

#rb Jamie.Dale

[CL 15128718 by Patrick Laflamme in ue5-main branch]
2021-01-18 10:45:38 -04:00
Patrick Laflamme
66f43c0eb6 Optmized how the Crash Context memory buffer used to serialize the context was used:
- Prevented CrashReportClient from serializing the CrashContext to the memory buffer if it was already serialized once.
  - Increased the default space reserved by memory buffer used to serialize the crash context from 32K to 128K because serializing the crash context of 'debug crash' command line in Editor uses up to 112K.
  - Cleared the memory buffer before serializing the CrashContext in case it was serialized more than once preventing the internal buffer to grow needlessly. Also, the XML reader being limited, would only read the first one written, ignoring further and more recent ones appended.

#rb Johan.Berg

[CL 15037279 by Patrick Laflamme in ue5-main branch]
2021-01-11 10:52:58 -04:00
Patrick Laflamme
1b65e55820 Logged ensures file/line/condition/message captured by CrashReportClientEditor in the analytic diagnostic log.
#rb Jamie.Dale

[CL 14823953 by Patrick Laflamme in ue5-main branch]
2020-11-30 17:56:19 -04:00
Marc Audy
a7f9391231 Merge UE5/Release-Engine-Staging @ 14811410 to UE5/Main
This represents UE4/Main @ 14768117

For ReleaseObjectVersion.h
#lockdown Marcus.Wassmer

[CL 14811440 by Marc Audy in ue5-main branch]
2020-11-24 18:42:39 -04:00
Marc Audy
68150e0be7 Merge UE5/Release-Engine-Staging to UE5/Main @ 14611496
This represents UE4/Main @ 14594913

[CL 14612291 by Marc Audy in ue5-main branch]
2020-10-29 13:38:15 -04:00
Marc Audy
4c1bb11c29 Merge UE5/Release-Engine-Staging to UE5/Main @ 14548662
This represents UE4/Main @ 14525125 + cherrypicked fixes
#skipundocheck

[CL 14551026 by Marc Audy in ue5-main branch]
2020-10-22 19:19:16 -04:00
Marc Audy
50a3d7d368 Merge Release-Engine-Staging to Main @ CL# 14467590
This represents UE4/Main @ 14432125 + some cherrypick fixes

[CL 14468207 by Marc Audy in ue5-main branch]
2020-10-09 22:42:26 -04:00
Marcus Wassmer
3b81cf8201 Merging using //UE5/Main_to_//UE5/Release-Engine-Staging @14384769
autoresolved files
#rb none

[CL 14384911 by Marcus Wassmer in ue5-main branch]
2020-09-24 00:43:27 -04:00
Marc Audy
a7c9001a94 Merging //UE5/Release-Engine-Staging to Main (//UE5/Main) @ 14075166
#rb
#rnx

[CL 14075271 by Marc Audy in ue5-main branch]
2020-08-11 01:36:57 -04:00
Marc Audy
11f5b21210 Merging //UE5/Release-Engine-Staging @ 13752110 to Main (//UE5/Main)
#rnx

[CL 13753156 by Marc Audy in ue5-main branch]
2020-06-23 18:40:00 -04:00
Patrick Laflamme
667697eac6 #jira UE-94499 - Crash Reporter application name shows Unreal Engine 4 Crash Reporter
- Fixed the application title, getting it from the engine version rather than hardcoding it.

#rb Francis.Hurteau

[CL 13747857 by Patrick Laflamme in ue5-main branch]
2020-06-23 09:54:23 -04:00
patrick laflamme
30017ee6f0 #jira UE-92231 - Editor session summary event doesn't have any link to CrashGUID
- Implemented a special logger inside CrashReportClientEditor to capture and save important events such as crash reporting (along with the CrashGUID)
  - When CrashReportClientEditor sends all the Editor summary events, if an error was detected in the session being sent, the mini-log for that session is attached to the analytic event.

#rb Chris.Gagnon, Jamie.Dale
#lockdown cristina.riverun

#ROBOMERGE-SOURCE: CL 12935952 in //UE4/Release-4.25/... via CL 12935970 via CL 12935996
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v682-12900288)

[CL 12936020 by patrick laflamme in Main branch]
2020-04-20 15:38:55 -04:00
patrick laflamme
a348d2b8d1 #jira UE-92094 - CrashReportClientEditor exits before the Editor
- Added code to the Editor to detect and report when CrashReportClientEditor exited unexpectedly. (MonitorExceptCode 777005 is set in the Editor session summary event)
  - Added a retrial loop to CrashReportClientApp to retry opening the the handle on the Editor process if the first time fails.

#rb Jamie.Dale
#lockdown cristina.riverun

#ROBOMERGE-SOURCE: CL 12878012 in //UE4/Release-4.25/... via CL 12878014 via CL 12878016
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v681-12776863)

[CL 12878017 by patrick laflamme in Main branch]
2020-04-17 07:28:54 -04:00
patrick laflamme
097792ed22 On Windows, exit the application with exit code 777003 if the crash reporter crashes while reporting or code 777004 if the crash handler (the __except clause) crashes after reporting an error.
Details:

The 4.24.3 analytics shows many unexplained exit codes, 23 647 at the moment. Normally, the Editor will exit with code 0 if everything when well, 3 or 1 if it gracefully handled a crash, 255 it was aborted. But we also see may others like the following predominent cases below:

-1073741819 => STATUS_ACCESS_VIOLATION => 8081 cases
-1073740791 => STATUS_STACK_BUFFER_OVERRUN  => 7581 cases
-1073740771 => STATUS_FATAL_USER_CALLBACK_EXCEPTION => 5357 cases

On Windows, the crash reporting system should catch and report STATUS_ACCESS_VIOLATION and then exit with code 3 (as the error was handled). For example, if you add a null pointer dereference(STATUS_ACCESS_VIOLATION) in the code, the crash reporter handle it and the Editor exit with code 3. Just like if you enter 'debug crash' console command, the editor gracefully handle the error and exit with code 3.  But if you move the null pointer dereference in the crash handler thread itself, the error is not handled and the Editor exits with code STATUS_ACCESS_VIOLATION. This hints that our crash reporting thread is likely crashing in the wild. It would be useful to isolate those cases from the other cases and keep count of how many times this happens.

#jira UE-91803 - Analytics hints that crash reporting and crash handling crashes themselves.
#rb Jamie.Dale
#lockdown cristina.riverun

#ROBOMERGE-SOURCE: CL 12695027 in //UE4/Release-4.25/... via CL 12695062 via CL 12695098
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v676-12543919)

[CL 12695136 by patrick laflamme in Main branch]
2020-04-09 15:50:15 -04:00
patrick laflamme
675cc37038 Prevented one CrashReportClientEditor from sending the report owned by another concurrent instance and losing the exit code.
#jira UE-91493 - CrashReportClientEditor may send a report owned by another concurrent instance losing the exit code in the process
#rb Jamie.Dale

#ROBOMERGE-SOURCE: CL 12598059 in //UE4/Release-4.25/... via CL 12598060 via CL 12598062
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v675-12543919)

[CL 12598063 by patrick laflamme in Main branch]
2020-04-03 16:23:51 -04:00
patrick laflamme
45a36adfa1 Also prevent CrashReportClientEditor from sending abnormal termination logs if bSendUnattendedBugReports is not set.
#jira UE-91318 - Events were sent from Crash Reporter after Editor Usage Data is disabled.
#rb none
#lockdown cristina.riveron

#ROBOMERGE-SOURCE: CL 12489133 in //UE4/Release-4.25/... via CL 12489135 via CL 12489146
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v673-12478461)

[CL 12489149 by patrick laflamme in Main branch]
2020-03-30 15:05:00 -04:00
patrick laflamme
475b34c0ec #jira UE-91318 - Events were sent from Crash Reporter after Editor Usage Data is disabled.
- Fixed crash report client editor to prevent sending any usage data.

#rb Jamie.Dale
#lockdown cristina.riveron

#ROBOMERGE-SOURCE: CL 12489019 in //UE4/Release-4.25/... via CL 12489022 via CL 12489029
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v673-12478461)

[CL 12489031 by patrick laflamme in Main branch]
2020-03-30 14:46:31 -04:00
patrick laflamme
7e1f5f4a6b Ensure to create a crash report everytime the Editor things this is an abnormal termination even if the Editor exit code is zero as it was in 4.24.3
#jira none
#rb trivial

#ROBOMERGE-SOURCE: CL 12380556 in //UE4/Release-4.25/... via CL 12380573
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v671-12333473)

[CL 12381193 by patrick laflamme in Main branch]
2020-03-23 14:47:08 -04:00
patrick laflamme
5e5233c055 Improved reliability of the Editor analytics.
- Modified the Editor session to support lockless logging and corresponding analysis for concurrent events.
  - Added null check EditorSessionSummaryWriter::LowDriveSpaceDetected() to prevent accessing a null session.
  - Fixed CrashReportClient that could use the analytic provider outside of init/shutdow
  - Fixed IdleTime reported that could be buggy if Slate did not register any interaction before a crash occurs.

#jira UE-90719 - FPlatformMisc::RequestExit() can corrupt the EditorSessionSummaryWriter
#rb Jamie.Dale

#ROBOMERGE-SOURCE: CL 12350899 in //UE4/Release-4.25/... via CL 12350910
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v671-12333473)

[CL 12350942 by patrick laflamme in Main branch]
2020-03-20 17:10:14 -04:00
patrick laflamme
71396d8aea Tried to get more reliable Editor analytic data out of crash rerporter app:
- Ensured the data is fully written and read to/form the pipe between the Editor and CrashReporter.
  - Refactored the code sending MTFB to send it as soon as possible
  - Added some special exit code to detect when the Editor is still running or the exit code is unknown when the summary event is sent.

#rb Sebastian.Nordgren, Johan.Berg
#jira UE-90733 - Editor summary event may not be sent as expected because CrashReportClient may not consume the pipe data

#ROBOMERGE-SOURCE: CL 12216180 in //UE4/Release-4.25/... via CL 12216189
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v662-12191386)

[CL 12216227 by patrick laflamme in Main branch]
2020-03-16 14:44:54 -04:00
johan berg
3d69cf35d5 Crash reporter was stripping callstack frames from the wrong direction.
When creating portable callstack for the crash reports a number of stack frames should be skipped, corresponding to the crash collecting code itself. This value was applied to wrong end of the callstack.

#jira UE-89885
#rb stefan.boberg

#ROBOMERGE-SOURCE: CL 12000209 in //UE4/Release-4.25/... via CL 12000773
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v656-11643781)

[CL 12000982 by johan berg in Main branch]
2020-03-06 12:23:26 -05:00