Symbolicate Linux crash logs
This commit is contained in:
parent
10099ec99d
commit
1d3a65207d
2 changed files with 20 additions and 2 deletions
|
@ -549,7 +549,7 @@ elseif(BUILD_ENV_UNIXLIKE)
|
|||
Tahoma2D Qt5::Core Qt5::Gui Qt5::Network Qt5::OpenGL Qt5::Svg Qt5::Xml
|
||||
Qt5::Script Qt5::Widgets Qt5::PrintSupport Qt5::Multimedia Qt5::SerialPort Qt5::UiTools
|
||||
${GL_LIB} ${GLUT_LIB} ${GLU_LIB} ${TURBOJPEG_LIB} ${OpenCV_LIBS}
|
||||
${EXTRA_LIBS}
|
||||
${EXTRA_LIBS} dl
|
||||
)
|
||||
endif()
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#else
|
||||
#ifdef MACOSX
|
||||
#include <mach-o/dyld.h>
|
||||
#else
|
||||
#include <link.h>
|
||||
#endif
|
||||
#include <execinfo.h>
|
||||
#include <signal.h>
|
||||
|
@ -313,7 +315,7 @@ static bool addr2line(std::string &out, const char *exepath, const size_t addr,
|
|||
#ifdef MACOSX
|
||||
sprintf(cmd, "atos -o \"%.400s\" -l %p %p 2>&1", exepath, laddr, addr);
|
||||
#else
|
||||
sprintf(cmd, "addr2line -f -p -e \"%.400s\" %p 2>&1", exepath, addr);
|
||||
sprintf(cmd, "addr2line -fpCis -e \"%.400s\" %p 2>&1", exepath, addr);
|
||||
#endif
|
||||
return sh(out, cmd);
|
||||
}
|
||||
|
@ -325,6 +327,16 @@ static bool generateMinidump(TFilePath dumpFile) { return false; }
|
|||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define HAS_MODULES
|
||||
#ifdef LINUX
|
||||
static int printModuleInfo(struct dl_phdr_info *i, size_t size, void *data) {
|
||||
std::string *out = (std::string *)data;
|
||||
char addr[512];
|
||||
sprintf(addr, "%p", (long)i->dlpi_addr);
|
||||
out->append(std::string(addr) + " - " + std::string(i->dlpi_name) + "\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void printModules(std::string &out) {
|
||||
#ifdef MACOSX
|
||||
char str[512];
|
||||
|
@ -339,6 +351,8 @@ static void printModules(std::string &out) {
|
|||
out.append(std::string(str) + " - " + path.toStdString());
|
||||
out.append("\n");
|
||||
}
|
||||
#else
|
||||
dl_iterate_phdr(printModuleInfo, &out);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -386,6 +400,10 @@ static void printBacktrace(std::string &out) {
|
|||
char addrstr[512];
|
||||
sprintf(addrstr, "%p", addr);
|
||||
sym = std::string(addrstr) + " (in " + module + ")";
|
||||
#else
|
||||
link_map *link_map;
|
||||
dladdr1(buffer[i], &info, (void **)&link_map, RTLD_DL_LINKMAP);
|
||||
addr -= link_map->l_addr;
|
||||
#endif
|
||||
|
||||
if (infoFound &&
|
||||
|
|
Loading…
Reference in a new issue