Clean things up a bit, add more debug paths
This commit is contained in:
parent
47dc8d0c3d
commit
c2b749e5b4
@ -427,6 +427,74 @@ class UploadThread: public IThread
|
|||||||
rootconsole->ConsolePrint("Accelerator upload thread terminated. (canceled = %s)", (cancel ? "true" : "false"));
|
rootconsole->ConsolePrint("Accelerator upload thread terminated. (canceled = %s)", (cancel ? "true" : "false"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined _LINUX
|
||||||
|
bool UploadSymbolFile(const google_breakpad::CodeModule *module) {
|
||||||
|
auto debugFile = module->debug_file();
|
||||||
|
if (debugFile[0] != '/') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(">>> Submitting %s\n", debugFile.c_str());
|
||||||
|
|
||||||
|
auto debugFileDir = google_breakpad::DirName(debugFile);
|
||||||
|
std::vector<string> debug_dirs{
|
||||||
|
debugFileDir,
|
||||||
|
debugFileDir + "/.debug",
|
||||||
|
"/usr/lib/debug" + debugFileDir,
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostringstream outputStream;
|
||||||
|
google_breakpad::DumpOptions options(ALL_SYMBOL_DATA, true);
|
||||||
|
|
||||||
|
{
|
||||||
|
StderrInhibitor stdrrInhibitor;
|
||||||
|
|
||||||
|
if (!WriteSymbolFile(debugFile, debug_dirs, options, outputStream)) {
|
||||||
|
outputStream.str("");
|
||||||
|
outputStream.clear();
|
||||||
|
|
||||||
|
// Try again without debug dirs.
|
||||||
|
if (!WriteSymbolFile(debugFile, {}, options, outputStream)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto output = outputStream.str();
|
||||||
|
// output = output.substr(0, output.find("\n"));
|
||||||
|
// printf(">>> %s\n", output.c_str());
|
||||||
|
|
||||||
|
IWebForm *form = webternet->CreateForm();
|
||||||
|
form->AddString("symbol_file", output.c_str());
|
||||||
|
|
||||||
|
MemoryDownloader data;
|
||||||
|
IWebTransfer *xfer = webternet->CreateSession();
|
||||||
|
xfer->SetFailOnHTTPError(true);
|
||||||
|
|
||||||
|
const char *symbolUrl = g_pSM->GetCoreConfigValue("MinidumpSymbolUrl");
|
||||||
|
if (!symbolUrl) symbolUrl = "http://crash.limetech.org/symbols/submit";
|
||||||
|
|
||||||
|
bool symbolUploaded = xfer->PostAndDownload(symbolUrl, form, &data, NULL);
|
||||||
|
|
||||||
|
if (!symbolUploaded) {
|
||||||
|
printf(">>> Symbol upload failed: %s (%d)\n", xfer->LastErrorMessage(), xfer->LastErrorCode());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int responseSize = data.GetSize();
|
||||||
|
char *response = new char[responseSize + 1];
|
||||||
|
strncpy(response, data.GetBuffer(), responseSize + 1);
|
||||||
|
response[responseSize] = '\0';
|
||||||
|
while (responseSize > 0 && response[responseSize - 1] == '\n') {
|
||||||
|
response[--responseSize] = '\0';
|
||||||
|
}
|
||||||
|
printf(">>> Symbol upload complete: %s\n", response);
|
||||||
|
delete[] response;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool PresubmitCrashDump(const char *path) {
|
bool PresubmitCrashDump(const char *path) {
|
||||||
google_breakpad::ProcessState processState;
|
google_breakpad::ProcessState processState;
|
||||||
google_breakpad::ProcessResult processResult;
|
google_breakpad::ProcessResult processResult;
|
||||||
@ -513,6 +581,9 @@ class UploadThread: public IThread
|
|||||||
char *response = new char[responseSize + 1];
|
char *response = new char[responseSize + 1];
|
||||||
strncpy(response, data.GetBuffer(), responseSize + 1);
|
strncpy(response, data.GetBuffer(), responseSize + 1);
|
||||||
response[responseSize] = '\0';
|
response[responseSize] = '\0';
|
||||||
|
while (responseSize > 0 && response[responseSize - 1] == '\n') {
|
||||||
|
response[--responseSize] = '\0';
|
||||||
|
}
|
||||||
printf(">>> Presubmit complete: %s\n", response);
|
printf(">>> Presubmit complete: %s\n", response);
|
||||||
|
|
||||||
if (responseSize < 2) {
|
if (responseSize < 2) {
|
||||||
@ -536,8 +607,8 @@ class UploadThread: public IThread
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned int responseCount = responseSize - 2;
|
unsigned int responseCount = responseSize - 2;
|
||||||
if (responseCount != moduleCount) {
|
if (responseCount < moduleCount) {
|
||||||
printf(">>> Response module list doesn't match sent list (%d != %d)\n", responseCount, moduleCount);
|
printf(">>> Response module list doesn't match sent list (%d < %d)\n", responseCount, moduleCount);
|
||||||
delete[] response;
|
delete[] response;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -550,66 +621,7 @@ class UploadThread: public IThread
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto module = processState.modules()->GetModuleAtIndex(moduleIndex);
|
auto module = processState.modules()->GetModuleAtIndex(moduleIndex);
|
||||||
|
UploadSymbolFile(module);
|
||||||
auto debugFile = module->debug_file();
|
|
||||||
if (debugFile[0] != '/') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf(">>> Submitting %s\n", debugFile.c_str());
|
|
||||||
|
|
||||||
auto debugFileDir = google_breakpad::DirName(debugFile);
|
|
||||||
std::vector<string> debug_dirs{
|
|
||||||
debugFileDir,
|
|
||||||
};
|
|
||||||
|
|
||||||
std::ostringstream outputStream;
|
|
||||||
google_breakpad::DumpOptions options(ALL_SYMBOL_DATA, true);
|
|
||||||
|
|
||||||
{
|
|
||||||
StderrInhibitor stdrrInhibitor;
|
|
||||||
|
|
||||||
if (!WriteSymbolFile(debugFile, debug_dirs, options, outputStream)) {
|
|
||||||
outputStream.str("");
|
|
||||||
outputStream.clear();
|
|
||||||
|
|
||||||
// Try again without debug dirs.
|
|
||||||
if (!WriteSymbolFile(debugFile, {}, options, outputStream)) {
|
|
||||||
// TODO: Something.
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto output = outputStream.str();
|
|
||||||
// output = output.substr(0, output.find("\n"));
|
|
||||||
// printf(">>> %s\n", output.c_str());
|
|
||||||
|
|
||||||
IWebForm *symbolForm = webternet->CreateForm();
|
|
||||||
symbolForm->AddString("symbol_file", output.c_str());
|
|
||||||
|
|
||||||
MemoryDownloader symbolData;
|
|
||||||
IWebTransfer *symbolXfer = webternet->CreateSession();
|
|
||||||
xfer->SetFailOnHTTPError(true);
|
|
||||||
|
|
||||||
const char *symbolUrl = g_pSM->GetCoreConfigValue("MinidumpSymbolUrl");
|
|
||||||
if (!symbolUrl) symbolUrl = "http://crash.limetech.org/symbols/submit";
|
|
||||||
|
|
||||||
bool symbolUploaded = symbolXfer->PostAndDownload(symbolUrl, symbolForm, &symbolData, NULL);
|
|
||||||
|
|
||||||
if (!symbolUploaded) {
|
|
||||||
printf(">>> Symbol upload failed: %s (%d)\n", symbolXfer->LastErrorMessage(), symbolXfer->LastErrorCode());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int symbolResponseSize = symbolData.GetSize();
|
|
||||||
char *symbolResponse = new char[symbolResponseSize + 1];
|
|
||||||
strncpy(symbolResponse, symbolData.GetBuffer(), symbolResponseSize + 1);
|
|
||||||
do {
|
|
||||||
symbolResponse[symbolResponseSize] = '\0';
|
|
||||||
} while (symbolResponse[--symbolResponseSize] == '\n');
|
|
||||||
printf(">>> Symbol upload complete: %s\n", symbolResponse);
|
|
||||||
delete[] symbolResponse;
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
printf(">>> Symbol submission not available on this platform\n");
|
printf(">>> Symbol submission not available on this platform\n");
|
||||||
@ -651,6 +663,9 @@ class UploadThread: public IThread
|
|||||||
if (responseSize >= maxlen) responseSize = maxlen - 1;
|
if (responseSize >= maxlen) responseSize = maxlen - 1;
|
||||||
strncpy(response, data.GetBuffer(), responseSize);
|
strncpy(response, data.GetBuffer(), responseSize);
|
||||||
response[responseSize] = '\0';
|
response[responseSize] = '\0';
|
||||||
|
while (responseSize > 0 && response[responseSize - 1] == '\n') {
|
||||||
|
response[--responseSize] = '\0';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
g_pSM->Format(response, maxlen, "%s (%d)", xfer->LastErrorMessage(), xfer->LastErrorCode());
|
g_pSM->Format(response, maxlen, "%s (%d)", xfer->LastErrorMessage(), xfer->LastErrorCode());
|
||||||
}
|
}
|
||||||
|
@ -226,11 +226,13 @@ int main(int argc, char *argv[])
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%s\n", debugFile.c_str());
|
// printf("%s\n", debugFile.c_str());
|
||||||
|
|
||||||
auto debugFileDir = google_breakpad::DirName(debugFile);
|
auto debugFileDir = google_breakpad::DirName(debugFile);
|
||||||
std::vector<string> debug_dirs{
|
std::vector<string> debug_dirs{
|
||||||
debugFileDir,
|
debugFileDir,
|
||||||
|
debugFileDir + "/.debug",
|
||||||
|
"/usr/lib/debug" + debugFileDir,
|
||||||
};
|
};
|
||||||
|
|
||||||
std::ostringstream outputStream;
|
std::ostringstream outputStream;
|
||||||
|
Loading…
Reference in New Issue
Block a user