OpenTTD Source 20241224-master-gee860a5c8e
CrashLogUnix Class Reference

Unix implementation for the crash logger. More...

Inheritance diagram for CrashLogUnix:
CrashLog

Public Member Functions

 CrashLogUnix (int signum)
 A crash log is always generated by signal.
 
- Public Member Functions inherited from CrashLog
virtual ~CrashLog ()=default
 Stub destructor to silence some compilers.
 
void FillCrashLog ()
 Fill the crash log buffer with all data of a crash log.
 
void PrintCrashLog () const
 
bool WriteCrashLog ()
 Write the crash log to a file.
 
virtual bool WriteCrashDump ()
 Write the (crash) dump to a file.
 
bool WriteSavegame ()
 Write the (crash) savegame to a file.
 
bool WriteScreenshot ()
 Write the (crash) screenshot to a file.
 
void SendSurvey () const
 Send the survey result, noting it was a crash.
 
void MakeCrashLog ()
 Makes the crash log, writes it to a file and then subsequently tries to make a crash dump and crash savegame.
 

Data Fields

jmp_buf internal_fault_jmp_buf
 Buffer to track the long jump set setup.
 
bool try_execute_active = false
 Whether we are in a TryExecute block.
 
- Data Fields inherited from CrashLog
nlohmann::json survey
 
std::string crashlog_filename
 
std::string crashdump_filename
 
std::string savegame_filename
 
std::string screenshot_filename
 

Static Public Attributes

static CrashLogUnixcurrent = nullptr
 Points to the current crash log.
 

Private Member Functions

void SurveyCrash (nlohmann::json &survey) const override
 Convert system crash reason to JSON.
 
void SurveyStacktrace (nlohmann::json &survey) const override
 Convert stacktrace to JSON.
 
bool TryExecute (std::string_view section_name, std::function< bool()> &&func) override
 Execute the func() and return its value.
 

Private Attributes

int signum
 Signal that has been thrown.
 

Additional Inherited Members

- Static Public Member Functions inherited from CrashLog
static void InitialiseCrashLog ()
 Initialiser for crash logs; do the appropriate things so crashes are handled by our crash handler instead of returning straight to the OS.
 
static void InitThread ()
 Prepare crash log handler for a newly started thread.
 
static void SetErrorMessage (const std::string &message)
 Sets a message for the error message handler.
 
static void AfterCrashLogCleanup ()
 Try to close the sound/video stuff so it doesn't keep lingering around incorrect video states or so, e.g.
 
- Protected Member Functions inherited from CrashLog
std::string CreateFileName (const char *ext, bool with_dir=true) const
 Create a timestamped filename.
 

Detailed Description

Unix implementation for the crash logger.

Definition at line 46 of file crashlog_unix.cpp.

Constructor & Destructor Documentation

◆ CrashLogUnix()

CrashLogUnix::CrashLogUnix ( int  signum)
inline

A crash log is always generated by signal.

Parameters
signumthe signal that was caused by the crash.

Definition at line 118 of file crashlog_unix.cpp.

Member Function Documentation

◆ SurveyCrash()

void CrashLogUnix::SurveyCrash ( nlohmann::json &  survey) const
inlineoverrideprivatevirtual

Convert system crash reason to JSON.

Parameters
surveyThe JSON object.

Implements CrashLog.

Definition at line 50 of file crashlog_unix.cpp.

References signum.

◆ SurveyStacktrace()

void CrashLogUnix::SurveyStacktrace ( nlohmann::json &  survey) const
inlineoverrideprivatevirtual

Convert stacktrace to JSON.

Parameters
surveyThe JSON object.

Implements CrashLog.

Definition at line 56 of file crashlog_unix.cpp.

References free(), and lengthof.

◆ TryExecute()

bool CrashLogUnix::TryExecute ( std::string_view  section_name,
std::function< bool()> &&  func 
)
inlineoverrideprivatevirtual

Execute the func() and return its value.

If any exception / signal / crash happens, catch it and return false. This function should, in theory, never not return, even in the worst conditions.

Parameters
section_nameThe name of the section to be executed. Printed when a crash happens.
funcThe function to call.
Returns
true iff the function returned true.

Implements CrashLog.

Definition at line 88 of file crashlog_unix.cpp.

References _signals_to_handle, internal_fault_jmp_buf, signum, and try_execute_active.

Field Documentation

◆ current

CrashLogUnix * CrashLogUnix::current = nullptr
static

Points to the current crash log.

Definition at line 130 of file crashlog_unix.cpp.

Referenced by HandleCrash(), and HandleInternalCrash().

◆ internal_fault_jmp_buf

jmp_buf CrashLogUnix::internal_fault_jmp_buf

Buffer to track the long jump set setup.

Definition at line 124 of file crashlog_unix.cpp.

Referenced by TryExecute().

◆ signum

int CrashLogUnix::signum
private

Signal that has been thrown.

Definition at line 48 of file crashlog_unix.cpp.

Referenced by SurveyCrash(), and TryExecute().

◆ try_execute_active

bool CrashLogUnix::try_execute_active = false

Whether we are in a TryExecute block.

Definition at line 127 of file crashlog_unix.cpp.

Referenced by TryExecute().


The documentation for this class was generated from the following file: