SVN: backtracexx: backtracexx.cpp backtracexx.hpp

pluto pluto at pld-linux.org
Tue Aug 21 16:18:44 CEST 2007


Author: pluto
Date: Tue Aug 21 16:18:44 2007
New Revision: 8697

Modified:
   backtracexx/backtracexx.cpp
   backtracexx/backtracexx.hpp
Log:
- report object base address.

Modified: backtracexx/backtracexx.cpp
==============================================================================
--- backtracexx/backtracexx.cpp	(original)
+++ backtracexx/backtracexx.cpp	Tue Aug 21 16:18:44 2007
@@ -70,8 +70,9 @@
 			Dl_info info;
 			if ( ::dladdr( reinterpret_cast< void* >( frame.address ), &info ) )
 			{
+				frame.moduleBaseAddress = reinterpret_cast< unsigned long >( info.dli_fbase );
 				if ( info.dli_fname && strlen( info.dli_fname ) )
-					frame.module = info.dli_fname;
+					frame.moduleName = info.dli_fname;
 				if ( info.dli_saddr )
 				{
 					frame.displacement = frame.address - reinterpret_cast< unsigned long >( info.dli_saddr );
@@ -114,7 +115,8 @@
 			::VirtualQuery( reinterpret_cast< ::LPCVOID >( frame.address ), &mbi, sizeof( mbi ) );
 			::CHAR moduleName[ MAX_PATH ];
 			::GetModuleFileNameA( reinterpret_cast< ::HMODULE >( mbi.AllocationBase ), moduleName, sizeof( moduleName ) );
-			frame.module = moduleName;
+			frame.moduleBaseAddress = mbi.AllocationBase;
+			frame.moduleName = moduleName;
 			int const MaxSymbolNameLength = 8192;
 			::BYTE symbolBuffer[ sizeof( ::IMAGEHLP_SYMBOL64 ) + MaxSymbolNameLength ];
 			::PIMAGEHLP_SYMBOL64 symbol = reinterpret_cast< ::PIMAGEHLP_SYMBOL64 >( symbolBuffer );
@@ -213,12 +215,14 @@
 		for ( backtracexx::Trace::const_iterator i = t.begin(); i != t.end(); ++i )
 		{
 			backtracexx::Frame const& f = *i;
-			os	<< std::showbase << std::showpoint << std::hex << std::setw( 16 ) << f.address
-				<< " : " << ( f.symbol.empty() ? "<unresolved symbol>" : f.symbol )
-				<< "+" << f.displacement;
+			os << std::showbase << std::hex << std::setw( 16 ) << f.address << " : ";
+			if ( f.symbol.empty() )
+				os << '?';
+			else
+				os << f.symbol << '+' << f.displacement;
 			if ( f.signalTrampoline )
 				os << " [signal trampoline]";
-			os << " [" << f.module << "]" << std::endl;
+			os << " [" << f.moduleName << " @ " << std::showbase << std::hex << f.moduleBaseAddress << " ]" << std::endl;
 		}
 		os << "==================" << std::endl;
 		return os;

Modified: backtracexx/backtracexx.hpp
==============================================================================
--- backtracexx/backtracexx.hpp	(original)
+++ backtracexx/backtracexx.hpp	Tue Aug 21 16:18:44 2007
@@ -32,7 +32,8 @@
 		unsigned long address;
 		std::string symbol;
 		unsigned long displacement;
-		std::string module;
+		std::string moduleName;
+		unsigned long moduleBaseAddress;
 		bool signalTrampoline;
 	};
 


More information about the pld-cvs-commit mailing list