Crashlog: Suffix crash file names with date/time

pull/175/head
Jonathan G Rennison 4 years ago
parent 60dabc68a0
commit 669b68d140

@ -626,7 +626,7 @@ bool CrashLog::WriteScreenshot(char *filename, const char *filename_last, const
* information like paths to the console.
* @return true when everything is made successfully.
*/
bool CrashLog::MakeCrashLog() const
bool CrashLog::MakeCrashLog()
{
/* Don't keep looping logging crashes. */
static bool crashlogged = false;
@ -637,13 +637,17 @@ bool CrashLog::MakeCrashLog() const
char buffer[65536 * 4];
bool ret = true;
char *name_buffer_date = this->name_buffer + seprintf(this->name_buffer, lastof(this->name_buffer), "crash-");
time_t cur_time = time(nullptr);
strftime(name_buffer_date, lastof(this->name_buffer) - name_buffer_date, "%Y%m%dT%H%M%SZ", gmtime(&cur_time));
printf("Crash encountered, generating crash log...\n");
this->FillCrashLog(buffer, lastof(buffer));
printf("%s\n", buffer);
printf("Crash log generated.\n\n");
printf("Writing crash log to disk...\n");
bool bret = this->WriteCrashLog(buffer, filename, lastof(filename));
bool bret = this->WriteCrashLog(buffer, filename, lastof(filename), this->name_buffer);
if (bret) {
printf("Crash log written to %s. Please add this file to any bug reports.\n\n", filename);
} else {
@ -767,7 +771,7 @@ bool CrashLog::MakeCrashSavegameAndScreenshot() const
bool ret = true;
printf("Writing crash savegame...\n");
bool bret = this->WriteSavegame(filename, lastof(filename));
bool bret = this->WriteSavegame(filename, lastof(filename), this->name_buffer);
if (bret) {
printf("Crash savegame written to %s. Please add this file and the last (auto)save to any bug reports.\n\n", filename);
} else {
@ -776,7 +780,7 @@ bool CrashLog::MakeCrashSavegameAndScreenshot() const
}
printf("Writing crash screenshot...\n");
bret = this->WriteScreenshot(filename, lastof(filename));
bret = this->WriteScreenshot(filename, lastof(filename), this->name_buffer);
if (bret) {
printf("Crash screenshot written to %s. Please add this file to any bug reports.\n\n", filename);
} else {

@ -122,6 +122,9 @@ protected:
char *LogCommandLog(char *buffer, const char *last) const;
public:
/** Buffer for the filename name prefix */
char name_buffer[64];
/** Stub destructor to silence some compilers. */
virtual ~CrashLog() {}
@ -143,7 +146,7 @@ public:
bool WriteSavegame(char *filename, const char *filename_last, const char *name = "crash") const;
bool WriteScreenshot(char *filename, const char *filename_last, const char *name = "crash") const;
bool MakeCrashLog() const;
bool MakeCrashLog();
bool MakeDesyncCrashLog(const std::string *log_in, std::string *log_out, const DesyncExtraInfo &info) const;
bool MakeVersionInfoLog() const;
bool MakeCrashSavegameAndScreenshot() const;

@ -82,6 +82,7 @@ public:
this->crashlog_filename[0] = '\0';
this->crashdump_filename[0] = '\0';
this->screenshot_filename[0] = '\0';
this->name_buffer[0] = '\0';
}
/**
@ -636,11 +637,14 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
CrashLogWindows *log = new CrashLogWindows(ep);
CrashLogWindows::current = log;
char *buf = log->FillCrashLog(log->crashlog, lastof(log->crashlog));
char *name_buffer_date = log->name_buffer + seprintf(log->name_buffer, lastof(log->name_buffer), "crash-");
time_t cur_time = time(nullptr);
strftime(name_buffer_date, lastof(log->name_buffer) - name_buffer_date, "%Y%m%dT%H%M%SZ", gmtime(&cur_time));
log->WriteCrashDump(log->crashdump_filename, lastof(log->crashdump_filename));
log->AppendDecodedStacktrace(buf, lastof(log->crashlog));
log->WriteCrashLog(log->crashlog, log->crashlog_filename, lastof(log->crashlog_filename));
log->WriteCrashLog(log->crashlog, log->crashlog_filename, lastof(log->crashlog_filename), log->name_buffer);
SetScreenshotAuxiliaryText("Crash Log", log->crashlog);
log->WriteScreenshot(log->screenshot_filename, lastof(log->screenshot_filename));
log->WriteScreenshot(log->screenshot_filename, lastof(log->screenshot_filename), log->name_buffer);
/* Close any possible log files */
CloseConsoleLogIfActive();
@ -831,7 +835,7 @@ static INT_PTR CALLBACK CrashDialogFunc(HWND wnd, UINT msg, WPARAM wParam, LPARA
_savegame_DBGL_data = CrashLogWindows::current->crashlog;
_save_DBGC_data = true;
char filename[MAX_PATH];
if (CrashLogWindows::current->WriteSavegame(filename, lastof(filename))) {
if (CrashLogWindows::current->WriteSavegame(filename, lastof(filename), CrashLogWindows::current->name_buffer)) {
size_t len = _tcslen(_save_succeeded) + _tcslen(OTTD2FS(filename)) + 1;
TCHAR *text = AllocaM(TCHAR, len);
_sntprintf(text, len, _save_succeeded, OTTD2FS(filename));

Loading…
Cancel
Save