Include console logs in Linux crash reports.
This commit is contained in:
		
							parent
							
								
									b24de4743c
								
							
						
					
					
						commit
						2319e8b926
					
				
							
								
								
									
										54
									
								
								accelerator.games.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								accelerator.games.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					"Games"
 | 
				
			||||||
 | 
					{	
 | 
				
			||||||
 | 
						"#default"
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"Signatures"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								/*
 | 
				
			||||||
 | 
								 * String: "\nConsole History (reversed)\n\n"
 | 
				
			||||||
 | 
								 * It's the function in the following branch.
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								"GetSpew"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library" "engine"
 | 
				
			||||||
 | 
									"linux"   "@_Z7GetSpewPcj"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"tf"
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"Signatures"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"GetSpew"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library" "engine"
 | 
				
			||||||
 | 
									"windows" "\x55\x8B\xEC\x83\xEC\x20\x8D\x45\xE0\x57"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"cstrike"
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"Signatures"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"GetSpew"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library" "engine"
 | 
				
			||||||
 | 
									"windows" "\x55\x8B\xEC\x53\xFF\x15\x2A\x2A\x2A\x2A\x8B\xD0"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"csgo"
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"Signatures"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"GetSpew"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library" "engine"
 | 
				
			||||||
 | 
									"windows" "\x55\x8B\xEC\x83\xEC\x08\x56\x57\x8B\xFA\x89\x4D\xFC"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -67,12 +67,16 @@ class CopyFile(Command):
 | 
				
			|||||||
		shutil.copy(self.fromFile, self.toPath)
 | 
							shutil.copy(self.fromFile, self.toPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
folders = [['addons', 'sourcemod', 'extensions']]
 | 
					folders = [
 | 
				
			||||||
 | 
						['addons', 'sourcemod', 'gamedata'],
 | 
				
			||||||
 | 
						['addons', 'sourcemod', 'extensions'],
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Setup
 | 
					#Setup
 | 
				
			||||||
job.AddCommand(DestroyPath(os.path.join(AMBuild.outputFolder, 'package')))
 | 
					job.AddCommand(DestroyPath(os.path.join(AMBuild.outputFolder, 'package')))
 | 
				
			||||||
job.AddCommand(CreateFolders(folders))
 | 
					job.AddCommand(CreateFolders(folders))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					job.AddCommand(CopyFile(os.path.join(AMBuild.sourceFolder, 'accelerator.games.txt'), os.path.join('addons', 'sourcemod', 'gamedata')))
 | 
				
			||||||
job.AddCommand(CopyFile(os.path.join(AMBuild.sourceFolder, 'accelerator.autoload'), os.path.join('addons', 'sourcemod', 'extensions')))
 | 
					job.AddCommand(CopyFile(os.path.join(AMBuild.sourceFolder, 'accelerator.autoload'), os.path.join('addons', 'sourcemod', 'extensions')))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bincopies = []
 | 
					bincopies = []
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,12 @@ Accelerator g_accelerator;
 | 
				
			|||||||
SMEXT_LINK(&g_accelerator);
 | 
					SMEXT_LINK(&g_accelerator);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IWebternet *webternet;
 | 
					IWebternet *webternet;
 | 
				
			||||||
static IThreadHandle *uploadThread;
 | 
					IGameConfig *gameconfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef void (*GetSpew_t)(char *buffer, unsigned int length);
 | 
				
			||||||
 | 
					GetSpew_t GetSpew;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char spewBuffer[65536]; // Hi.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char buffer[512];
 | 
					char buffer[512];
 | 
				
			||||||
google_breakpad::ExceptionHandler *handler = NULL;
 | 
					google_breakpad::ExceptionHandler *handler = NULL;
 | 
				
			||||||
@ -73,10 +78,19 @@ static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	//printf("Wrote minidump to: %s\n", descriptor.path());
 | 
						//printf("Wrote minidump to: %s\n", descriptor.path());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys_write(STDOUT_FILENO, "Wrote minidump to: ", 19);
 | 
						if (succeeded) {
 | 
				
			||||||
 | 
							sys_write(STDOUT_FILENO, "Wrote minidump to: ", 19);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							sys_write(STDOUT_FILENO, "Failed to write minidump to: ", 29);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys_write(STDOUT_FILENO, descriptor.path(), my_strlen(descriptor.path()));
 | 
						sys_write(STDOUT_FILENO, descriptor.path(), my_strlen(descriptor.path()));
 | 
				
			||||||
	sys_write(STDOUT_FILENO, "\n", 1);
 | 
						sys_write(STDOUT_FILENO, "\n", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!succeeded) {
 | 
				
			||||||
 | 
							return succeeded;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	my_strlcpy(buffer, descriptor.path(), sizeof(buffer));
 | 
						my_strlcpy(buffer, descriptor.path(), sizeof(buffer));
 | 
				
			||||||
	my_strlcat(buffer, ".txt", sizeof(buffer));
 | 
						my_strlcat(buffer, ".txt", sizeof(buffer));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -86,6 +100,13 @@ static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
 | 
				
			|||||||
		return succeeded;
 | 
							return succeeded;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						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);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char pis[64];
 | 
						char pis[64];
 | 
				
			||||||
	char pds[32];
 | 
						char pds[32];
 | 
				
			||||||
	for (unsigned i = 0; i < plugin_count; ++i) {
 | 
						for (unsigned i = 0; i < plugin_count; ++i) {
 | 
				
			||||||
@ -315,6 +336,16 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!gameconfs->LoadGameConfigFile("accelerator.games", &gameconfig, error, maxlength)) {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!gameconfig->GetMemSig("GetSpew", (void **)&GetSpew)) {
 | 
				
			||||||
 | 
							smutils->LogError(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.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined _LINUX
 | 
					#if defined _LINUX
 | 
				
			||||||
	google_breakpad::MinidumpDescriptor descriptor(buffer);
 | 
						google_breakpad::MinidumpDescriptor descriptor(buffer);
 | 
				
			||||||
	handler = new google_breakpad::ExceptionHandler(descriptor, NULL, dumpCallback, NULL, true, -1);
 | 
						handler = new google_breakpad::ExceptionHandler(descriptor, NULL, dumpCallback, NULL, true, -1);
 | 
				
			||||||
 | 
				
			|||||||
@ -38,10 +38,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Basic information exposed publicly */
 | 
					/* Basic information exposed publicly */
 | 
				
			||||||
#define SMEXT_CONF_NAME			"Accelerator"
 | 
					#define SMEXT_CONF_NAME			"Accelerator"
 | 
				
			||||||
#define SMEXT_CONF_DESCRIPTION	"Take back control"
 | 
					#define SMEXT_CONF_DESCRIPTION	"SRCDS Crash Handler"
 | 
				
			||||||
#define SMEXT_CONF_VERSION		SM_FULL_VERSION
 | 
					#define SMEXT_CONF_VERSION		SM_FULL_VERSION
 | 
				
			||||||
#define SMEXT_CONF_AUTHOR		"Asher \"asherkin\" Baker"
 | 
					#define SMEXT_CONF_AUTHOR		"Asher \"asherkin\" Baker"
 | 
				
			||||||
#define SMEXT_CONF_URL			"http://limetech.org/"
 | 
					#define SMEXT_CONF_URL			"https://crash.limetech.org/"
 | 
				
			||||||
#define SMEXT_CONF_LOGTAG		"CRASH"
 | 
					#define SMEXT_CONF_LOGTAG		"CRASH"
 | 
				
			||||||
#define SMEXT_CONF_LICENSE		"GPL"
 | 
					#define SMEXT_CONF_LICENSE		"GPL"
 | 
				
			||||||
#define SMEXT_CONF_DATESTRING	__DATE__
 | 
					#define SMEXT_CONF_DATESTRING	__DATE__
 | 
				
			||||||
@ -62,11 +62,11 @@
 | 
				
			|||||||
//#define SMEXT_ENABLE_HANDLESYS
 | 
					//#define SMEXT_ENABLE_HANDLESYS
 | 
				
			||||||
//#define SMEXT_ENABLE_PLAYERHELPERS
 | 
					//#define SMEXT_ENABLE_PLAYERHELPERS
 | 
				
			||||||
//#define SMEXT_ENABLE_DBMANAGER
 | 
					//#define SMEXT_ENABLE_DBMANAGER
 | 
				
			||||||
//#define SMEXT_ENABLE_GAMECONF
 | 
					#define SMEXT_ENABLE_GAMECONF
 | 
				
			||||||
//#define SMEXT_ENABLE_MEMUTILS
 | 
					//#define SMEXT_ENABLE_MEMUTILS
 | 
				
			||||||
//#define SMEXT_ENABLE_GAMEHELPERS
 | 
					//#define SMEXT_ENABLE_GAMEHELPERS
 | 
				
			||||||
//#define SMEXT_ENABLE_TIMERSYS
 | 
					//#define SMEXT_ENABLE_TIMERSYS
 | 
				
			||||||
#define SMEXT_ENABLE_THREADER
 | 
					//#define SMEXT_ENABLE_THREADER
 | 
				
			||||||
#define SMEXT_ENABLE_LIBSYS
 | 
					#define SMEXT_ENABLE_LIBSYS
 | 
				
			||||||
//#define SMEXT_ENABLE_MENUS
 | 
					//#define SMEXT_ENABLE_MENUS
 | 
				
			||||||
//#define SMEXT_ENABLE_ADTFACTORY
 | 
					//#define SMEXT_ENABLE_ADTFACTORY
 | 
				
			||||||
 | 
				
			|||||||
@ -18,9 +18,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define SM_BUILD_TAG		"-manual"
 | 
					#define SM_BUILD_TAG		"-manual"
 | 
				
			||||||
#define SM_BUILD_UNIQUEID	"[MANUAL BUILD]"
 | 
					#define SM_BUILD_UNIQUEID	"[MANUAL BUILD]"
 | 
				
			||||||
#define SM_VERSION			"2.0.1"
 | 
					#define SM_VERSION			"2.2.0"
 | 
				
			||||||
#define SM_FULL_VERSION		SM_VERSION SM_BUILD_TAG
 | 
					#define SM_FULL_VERSION		SM_VERSION SM_BUILD_TAG
 | 
				
			||||||
#define SM_FILE_VERSION		2,0,1,0
 | 
					#define SM_FILE_VERSION		2,2,0,0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
2.1.0
 | 
					2.2.0
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user