Include steam.inf in crash metadata

This commit is contained in:
Asher Baker 2016-08-22 15:06:14 +01:00
parent d2ad4eb071
commit e4a0c190ab
4 changed files with 71 additions and 23 deletions

View File

@ -7,7 +7,7 @@
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation.
*
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
@ -28,7 +28,7 @@
#include "third_party/lss/linux_syscall_support.h"
#include <signal.h>
#include <dirent.h>
#include <dirent.h>
#include <unistd.h>
#elif defined _WINDOWS
#define _STDINT // ~.~
@ -54,6 +54,7 @@ char crashCommandLine[1024];
char crashSourceModPath[512];
char crashGameDirectory[256];
char crashExtensionVersion[32];
char steamInf[512];
char dumpStoragePath[512];
char logPath[512];
@ -124,13 +125,16 @@ static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
sys_write(extra, crashGameDirectory, my_strlen(crashGameDirectory));
sys_write(extra, "\nExtensionVersion=", 18);
sys_write(extra, crashExtensionVersion, my_strlen(crashExtensionVersion));
sys_write(extra, steamInf, my_strlen(steamInf));
sys_write(extra, "\n-------- CONFIG END --------\n", 30);
if (GetSpew) {
GetSpew(spewBuffer, sizeof(spewBuffer));
sys_write(extra, "-------- CONSOLE HISTORY BEGIN --------\n", 40);
sys_write(extra, spewBuffer, my_strlen(spewBuffer));
sys_write(extra, "-------- CONSOLE HISTORY END --------\n", 38);
if (my_strlen(spewBuffer) > 0) {
sys_write(extra, "-------- CONSOLE HISTORY BEGIN --------\n", 40);
sys_write(extra, spewBuffer, my_strlen(spewBuffer));
sys_write(extra, "-------- CONSOLE HISTORY END --------\n", 38);
}
}
#if 0
@ -201,7 +205,7 @@ void OnGameFrame(bool simulating)
for (int i = 0; i < kNumHandledSignals; ++i) {
sigaddset(&act.sa_mask, kExceptionSignals[i]);
}
act.sa_sigaction = SignalHandler;
act.sa_flags = SA_ONSTACK | SA_SIGINFO;
@ -233,15 +237,15 @@ LONG CALLBACK BreakpadVectoredHandler(_In_ PEXCEPTION_POINTERS ExceptionInfo)
default:
return EXCEPTION_CONTINUE_SEARCH;
}
if (handler->WriteMinidumpForException(ExceptionInfo))
{
// Stop the handler thread from deadlocking us.
delete handler;
// Stop Valve's handler being called.
ExceptionInfo->ExceptionRecord->ExceptionCode = EXCEPTION_BREAKPOINT;
return EXCEPTION_EXECUTE_HANDLER;
} else {
return EXCEPTION_CONTINUE_SEARCH;
@ -270,12 +274,24 @@ static bool dumpCallback(const wchar_t* dump_path,
return succeeded;
}
fprintf(extra, "-------- CONFIG BEGIN --------");
fprintf(extra, "\nMap=%s", crashMap);
fprintf(extra, "\nGamePath=%s", crashGamePath);
fprintf(extra, "\nCommandLine=%s", crashCommandLine);
fprintf(extra, "\nSourceModPath=%s", crashSourceModPath);
fprintf(extra, "\nGameDirectory=%s", crashGameDirectory);
fprintf(extra, "\nExtensionVersion=%s", crashExtensionVersion);
fprintf(extra, "%s", steamInf);
fprintf(extra, "\n-------- CONFIG END --------\n");
if (GetSpew) {
GetSpew(spewBuffer, sizeof(spewBuffer));
fprintf(extra, "-------- CONSOLE HISTORY BEGIN --------\n%s-------- CONSOLE HISTORY END --------\n", spewBuffer);
if (strlen(spewBuffer) > 0) {
fprintf(extra, "-------- CONSOLE HISTORY BEGIN --------\n%s-------- CONSOLE HISTORY END --------\n", spewBuffer);
}
}
fclose(extra);
fclose(extra);
return succeeded;
}
@ -308,7 +324,7 @@ bool UploadAndDeleteCrashDump(const char *path, char *response, int maxlen)
const char *minidumpUrl = g_pSM->GetCoreConfigValue("MinidumpUrl");
if (!minidumpUrl) minidumpUrl = "http://crash.limetech.org/submit";
bool uploaded = xfer->PostAndDownload(minidumpUrl, form, &data, NULL);
bool uploaded = xfer->PostAndDownload(minidumpUrl, form, &data, NULL);
if (response) {
if (uploaded) {
@ -417,7 +433,7 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late)
if (!gameconfs->LoadGameConfigFile("accelerator.games", &gameconfig, gameconfigError, sizeof(gameconfigError))) {
smutils->LogError(myself, "WARNING: Failed to load gamedata file, console output and command line will not be included in crash reports: %s", gameconfigError);
} else if (!gameconfig->GetMemSig("GetSpew", (void **)&GetSpew)) {
smutils->LogError(myself, "WARNING: GetSpew not found in gamedata, console output will not be included in crash reports.");
smutils->LogMessage(myself, "WARNING: GetSpew not found in gamedata, console output will not be included in crash reports.");
} else if (!GetSpew) {
smutils->LogError(myself, "WARNING: Sigscan for GetSpew failed, console output will not be included in crash reports.");
}
@ -429,7 +445,7 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late)
struct sigaction oact;
sigaction(SIGSEGV, NULL, &oact);
SignalHandler = oact.sa_sigaction;
g_pSM->AddGameFrameHook(OnGameFrame);
#elif defined _WINDOWS
wchar_t *buf = new wchar_t[sizeof(dumpStoragePath)];
@ -438,7 +454,7 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late)
handler = new google_breakpad::ExceptionHandler(std::wstring(buf, num_chars), NULL, dumpCallback, NULL, google_breakpad::ExceptionHandler::HANDLER_ALL);
vectoredHandler = AddVectoredExceptionHandler(0, BreakpadVectoredHandler);
delete buf;
#else
#error Bad platform.
@ -474,7 +490,7 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late)
return true;
}
void Accelerator::SDK_OnUnload()
void Accelerator::SDK_OnUnload()
{
#if defined _LINUX
g_pSM->RemoveGameFrameHook(OnGameFrame);
@ -534,5 +550,38 @@ void Accelerator::OnCoreMapStart(edict_t *pEdictList, int edictCount, int client
strncpy(crashSourceModPath, g_pSM->GetSourceModPath(), sizeof(crashSourceModPath) - 1);
strncpy(crashGameDirectory, g_pSM->GetGameFolderName(), sizeof(crashGameDirectory) - 1);
strncpy(crashExtensionVersion, SMEXT_CONF_VERSION, sizeof(crashExtensionVersion) - 1);
}
char steamInfPath[512];
g_pSM->BuildPath(Path_Game, steamInfPath, sizeof(steamInfPath), "steam.inf");
char steamInfTemp[256] = {0};
FILE *f = fopen(steamInfPath, "rb");
fread(steamInfTemp, sizeof(char), sizeof(steamInfTemp) - 1, f);
fclose(f);
// This is horrible, but I'm busy and this is
// the first thing I thought of that would work.
unsigned source = 0;
strcat(steamInf, "\nSteam_");
unsigned target = strlen(steamInf);
while (true) {
if (steamInfTemp[source] == '\0') {
source++;
break;
}
if (steamInfTemp[source] == '\r') {
source++;
continue;
}
if (steamInfTemp[source] == '\n') {
source++;
if (steamInfTemp[source] == '\0') {
break;
}
strcat(steamInf, "\nSteam_");
target = strlen(steamInf);
continue;
}
steamInf[target++] = steamInfTemp[source++];
}
}

View File

@ -18,9 +18,9 @@
#define SM_BUILD_TAG "-manual"
#define SM_BUILD_UNIQUEID "[MANUAL BUILD]"
#define SM_VERSION "2.2.1"
#define SM_VERSION "2.3.0"
#define SM_FULL_VERSION SM_VERSION SM_BUILD_TAG
#define SM_FILE_VERSION 2,2,1,0
#define SM_FILE_VERSION 2,3,0,0
#endif

View File

@ -1 +1 @@
2.2.1
2.3.0

View File

@ -3,7 +3,7 @@
#include "third_party/lss/linux_syscall_support.h"
#include <signal.h>
#include <dirent.h>
#include <dirent.h>
#include <unistd.h>
static bool dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor, void *context, bool succeeded)
@ -28,7 +28,6 @@ int main(int argc, char *argv[])
// Test shit here.
__builtin_trap();
delete handler;
delete handler;
return 0;
}