diff --git a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp index d4ee732c73..f45fcfd49a 100644 --- a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp +++ b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp @@ -201,26 +201,63 @@ void BacktraceNames::FromAddr( void *p ) } else { -#if 0 +#if 1 + fprintf(stderr, "um, crashed\n"); CStringArray mangledAndFile; - split(f, " ", mangledAndFile); + split(f, " ", mangledAndFile, true); + fprintf(stderr, "split %d: %s\n", int(mangledAndFile.size()), f); if (mangledAndFile.size() > 0) { + fprintf(stderr, "size>0\n"); Symbol = mangledAndFile[0]; - if (mangledAndFile.size() > 2) + if (Symbol[0] != '-' && Symbol[0] != '+') { - File = mangledAndFile[3]; - File = File.substr(0, File.rfind(")")); + if (Symbol[0] == '_') + Symbol = Symbol.substr(1); + fprintf(stderr, "Symbol: %s\n", Symbol.c_str()); + if (mangledAndFile.size() > 3) + { + fprintf(stderr, "size > 3\n"); + File = mangledAndFile[3]; + fprintf(stderr, "File: %s\n", File.c_str()); + unsigned pos = File.find('('); + unsigned start = (pos == File.npos ? 0 : pos+1); + pos = File.rfind(')') - 1; + fprintf(stderr, "start/end: %u/%u\n", start, pos); + File = File.substr(start, pos); + } + else if (mangledAndFile.size() == 3) + { + fprintf(stderr, "size==3\n"); + File = mangledAndFile[2].substr(0, mangledAndFile[2].rfind(')')); + } + else + File = ""; } else - File = ""; + { + Symbol = mangledAndFile[0] + " " + mangledAndFile[1]; + if (mangledAndFile.size() == 3) + { + File = mangledAndFile[2]; + fprintf(stderr, "File: %s\n", File.c_str()); + unsigned pos = File.find('('); + unsigned start = (pos == File.npos ? 0 : pos+1); + pos = File.rfind(')') - 1; + fprintf(stderr, "start/end: %u/%u\n", start, pos); + File = File.substr(start, pos); + } + else + File = ""; + } } else { Symbol = ""; File = ""; } + fprintf(stderr, "File: %s\n", File.c_str()); #else Symbol = f; File = "";