Crash/desync logs: Include non-default settings section

pull/642/head
Jonathan G Rennison 5 months ago
parent 2ec4b2a8ca
commit 7dd820fe22

@ -37,6 +37,8 @@
#include "event_logs.h"
#include "scope.h"
#include "progress.h"
#include "settings_type.h"
#include "settings_internal.h"
#include "ai/ai_info.hpp"
#include "game/game.hpp"
@ -508,6 +510,31 @@ char *CrashLog::LogCommandLog(char *buffer, const char *last) const
return buffer;
}
/**
* Writes the non-default settings to the buffer.
* @param buffer The begin where to write at.
* @param last The last position in the buffer to write to.
* @return the position of the \c '\0' character after the buffer.
*/
char *CrashLog::LogSettings(char *buffer, const char *last) const
{
buffer += seprintf(buffer, last, "Non-default settings:");
IterateSettingsTables([&](const SettingTable &table, void *object) {
for (auto &sd : table) {
/* Skip any old settings we no longer save/load. */
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
if (sd->IsDefaultValue(object)) continue;
buffer += seprintf(buffer, last, "\n %s: ", sd->name);
buffer = sd->FormatValue(buffer, last, object);
}
});
buffer += seprintf(buffer, last, "\n\n");
return buffer;
}
/**
* Fill the crash log buffer with all data of a crash log.
* @param buffer The begin where to write at.
@ -618,6 +645,9 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last)
buffer = this->TryCrashLogFaultSection(buffer, last, "command log", [](CrashLog *self, char *buffer, const char *last) -> char * {
return self->LogCommandLog(buffer, last);
});
buffer = this->TryCrashLogFaultSection(buffer, last, "settings", [](CrashLog *self, char *buffer, const char *last) -> char * {
return self->LogSettings(buffer, last);
});
buffer += seprintf(buffer, last, "*** End of OpenTTD Crash Report ***\n");
this->StopCrashLogFaultHandler();
@ -682,6 +712,7 @@ char *CrashLog::FillDesyncCrashLog(char *buffer, const char *last, const DesyncE
buffer = this->LogGamelog(buffer, last);
buffer = this->LogRecentNews(buffer, last);
buffer = this->LogCommandLog(buffer, last);
buffer = this->LogSettings(buffer, last);
buffer = DumpDesyncMsgLog(buffer, last);
bool have_cache_log = false;
@ -744,6 +775,7 @@ char *CrashLog::FillInconsistencyLog(char *buffer, const char *last, const Incon
buffer = this->LogGamelog(buffer, last);
buffer = this->LogRecentNews(buffer, last);
buffer = this->LogCommandLog(buffer, last);
buffer = this->LogSettings(buffer, last);
buffer = DumpDesyncMsgLog(buffer, last);
if (!info.check_caches_result.empty()) {

@ -134,6 +134,7 @@ protected:
char *LogGamelog(char *buffer, const char *last) const;
char *LogRecentNews(char *buffer, const char *list) const;
char *LogCommandLog(char *buffer, const char *last) const;
char *LogSettings(char *buffer, const char *last) const;
virtual void StartCrashLogFaultHandler();
virtual void StopCrashLogFaultHandler();

Loading…
Cancel
Save