]> granicus.if.org Git - icinga2/commitdiff
Remove source line information from stacktraces
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 25 Jun 2014 07:18:21 +0000 (09:18 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 25 Jun 2014 07:18:53 +0000 (09:18 +0200)
fixes #6576

lib/base/stacktrace.cpp
lib/base/utility.cpp
lib/base/utility.hpp

index 04d0d65176fb6977eb6c9cd819931ed750b657ea..cea0768c562b2b3dd0dec8a58ead5cc16e284e6b 100644 (file)
@@ -133,7 +133,6 @@ void StackTrace::Print(std::ostream& fp, int ignoreFrames) const
                                        path = path.SubStr(slashp + 1);
 
                                message = path + ": " + sym_demangled + " (" + String(sym_end);
-                               message += " (" + Utility::GetSymbolSource(m_Frames[i]) + ")";
                        }
                }
 
@@ -148,9 +147,7 @@ void StackTrace::Print(std::ostream& fp, int ignoreFrames) const
 #      endif /* HAVE_BACKTRACE_SYMBOLS */
 #else /* _WIN32 */
        for (int i = ignoreFrames + 1; i < m_Count; i++) {
-               fp << "\t(" << i - ignoreFrames - 1 << ") "
-                  << Utility::GetSymbolSource(m_Frames[i])
-                  << ": "
+               fp << "\t(" << i - ignoreFrames - 1 << "): "
                   << Utility::GetSymbolName(m_Frames[i])
                   << std::endl;
        }
index 5eac40d35c992c93fd86904f0540eff02647ec93..4d13444f050d6b21be5e2f24c26f86980f41c69d 100644 (file)
@@ -85,43 +85,6 @@ String Utility::GetTypeName(const std::type_info& ti)
        return DemangleSymbolName(ti.name());
 }
 
-/**
- * Looks up source file name and line number information for the specified
- * ELF executable and RVA.
- *
- * @param exe The ELF file.
- * @param rva The RVA.
- * @returns Source file and line number.
- */
-String Utility::Addr2Line(const String& exe, uintptr_t rva)
-{
-#ifndef _WIN32
-       std::ostringstream msgbuf;
-       msgbuf << "addr2line -s -e " << Application::GetExePath(exe) << " " << std::hex << rva << " 2>/dev/null";
-
-       String args = msgbuf.str();
-
-       FILE *fp = popen(args.CStr(), "r");
-
-       if (!fp)
-               return "RVA: " + Convert::ToString(rva);
-
-       char buffer[512] = {};
-       fgets(buffer, sizeof(buffer), fp);
-       fclose(fp);
-
-       String line = buffer;
-       boost::algorithm::trim_right(line);
-
-       if (line.GetLength() == 0)
-               return "RVA: " + Convert::ToString(rva);
-
-       return line;
-#else /* _WIN32 */
-       return String();
-#endif /* _WIN32 */
-}
-
 String Utility::GetSymbolName(const void *addr)
 {
 #ifdef HAVE_DLADDR
@@ -155,36 +118,6 @@ String Utility::GetSymbolName(const void *addr)
        return "(unknown function)";
 }
 
-String Utility::GetSymbolSource(const void *addr)
-{
-#ifdef HAVE_DLADDR
-       Dl_info dli;
-
-       if (dladdr(addr, &dli) > 0) {
-               uintptr_t rva = reinterpret_cast<uintptr_t>(addr) - reinterpret_cast<uintptr_t>(dli.dli_fbase);
-               return Addr2Line(dli.dli_fname, rva);
-       }
-#endif /* HAVE_DLADDR */
-
-#ifdef _WIN32
-       char buffer[sizeof(SYMBOL_INFO)+MAX_SYM_NAME * sizeof(TCHAR)];
-       PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
-       pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
-       pSymbol->MaxNameLen = MAX_SYM_NAME;
-
-       DWORD64 dwAddress = (DWORD64)addr;
-       DWORD dwDisplacement;
-
-       IMAGEHLP_LINE64 line;
-       line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
-
-       if (SymGetLineFromAddr64(GetCurrentProcess(), dwAddress, &dwDisplacement, &line))
-               return String(line.FileName) + ":" + Convert::ToString(line.LineNumber);
-#endif /* _WIN32 */
-
-       return "(unknown file/line)";
-}
-
 /**
  * Performs wildcard pattern matching.
  *
index f3e931850b173d82e86e8e301300792031a05284..c49beeb54247d0595214dcfbd6a9a2a78d7b055f 100644 (file)
@@ -60,9 +60,7 @@ class I2_BASE_API Utility
 public:
        static String DemangleSymbolName(const String& sym);
        static String GetTypeName(const std::type_info& ti);
-       static String Addr2Line(const String& exe, uintptr_t rva);
        static String GetSymbolName(const void *addr);
-       static String GetSymbolSource(const void *addr);
 
        static bool Match(const String& pattern, const String& text);