[icinga-checkins] icinga.org: icinga2/next: Remove source line information from stacktraces

git at icinga.org git at icinga.org
Wed Jun 25 09:19:11 CEST 2014


Module: icinga2
Branch: next
Commit: ad1a11f88208c040f81b1ec8c6270df1fd388ed1
URL:    https://git.icinga.org/?p=icinga2.git;a=commit;h=ad1a11f88208c040f81b1ec8c6270df1fd388ed1

Author: Gunnar Beutner <gunnar.beutner at netways.de>
Date:   Wed Jun 25 09:18:21 2014 +0200

Remove source line information from stacktraces

fixes #6576

---

 lib/base/stacktrace.cpp |    5 +---
 lib/base/utility.cpp    |   67 -----------------------------------------------
 lib/base/utility.hpp    |    2 --
 3 files changed, 1 insertion(+), 73 deletions(-)

diff --git a/lib/base/stacktrace.cpp b/lib/base/stacktrace.cpp
index 04d0d65..cea0768 100644
--- a/lib/base/stacktrace.cpp
+++ b/lib/base/stacktrace.cpp
@@ -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;
 	}
diff --git a/lib/base/utility.cpp b/lib/base/utility.cpp
index 5eac40d..4d13444 100644
--- a/lib/base/utility.cpp
+++ b/lib/base/utility.cpp
@@ -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.
  *
diff --git a/lib/base/utility.hpp b/lib/base/utility.hpp
index f3e9318..c49beeb 100644
--- a/lib/base/utility.hpp
+++ b/lib/base/utility.hpp
@@ -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);
 



More information about the icinga-checkins mailing list