diff --git a/client/TracyCallstack.cpp b/client/TracyCallstack.cpp index 31411f6e..b7a683d7 100644 --- a/client/TracyCallstack.cpp +++ b/client/TracyCallstack.cpp @@ -243,10 +243,8 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr ) si->SizeOfStruct = sizeof( SYMBOL_INFO ); si->MaxNameLen = 1024; - if( SymFromAddr( proc, ptr, nullptr, si ) == 0 ) - { - GetModuleName( ptr, si->Name, si->NameLen ); - } + const auto symValid = SymFromAddr( proc, ptr, nullptr, si ) != 0; + if( !symValid ) GetModuleName( ptr, si->Name, si->NameLen ); IMAGEHLP_LINE64 line; DWORD displacement = 0; @@ -277,6 +275,8 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr ) file[fsz] = '\0'; cb_data[write].file = file; + + cb_data[write].symAddr = symValid ? si->Address : 0; } #ifndef __CYGWIN__ @@ -286,10 +286,8 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr ) { auto& cb = cb_data[i]; - if( SymFromInlineContext( proc, ptr, ctx, nullptr, si ) == 0 ) - { - GetModuleName( ptr, si->Name, si->NameLen ); - } + const auto symInlineValid = SymFromInlineContext( proc, ptr, ctx, nullptr, si ) != 0; + if( !symInlineValid ) GetModuleName( ptr, si->Name, si->NameLen ); auto name = (char*)tracy_malloc( si->NameLen + 1 ); memcpy( name, si->Name, si->NameLen ); @@ -314,6 +312,8 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr ) file[fsz] = '\0'; cb.file = file; + cb.symAddr = symInlineValid ? si->Address : 0; + ctx++; } } diff --git a/client/TracyCallstack.hpp b/client/TracyCallstack.hpp index 7a88c32b..bbf1e84b 100644 --- a/client/TracyCallstack.hpp +++ b/client/TracyCallstack.hpp @@ -27,6 +27,7 @@ struct CallstackEntry const char* name; const char* file; uint32_t line; + uint64_t symAddr; }; struct CallstackEntryData diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 309ef549..9a6be2b9 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -2233,6 +2233,7 @@ void Profiler::SendCallstackFrame( uint64_t ptr ) MemWrite( &item.callstackFrame.name, (uint64_t)frame.name ); MemWrite( &item.callstackFrame.file, (uint64_t)frame.file ); MemWrite( &item.callstackFrame.line, frame.line ); + MemWrite( &item.callstackFrame.symAddr, frame.symAddr ); AppendData( &item, QueueDataSize[(int)QueueType::CallstackFrame] ); diff --git a/common/TracyProtocol.hpp b/common/TracyProtocol.hpp index 6bb1e796..df61fe19 100644 --- a/common/TracyProtocol.hpp +++ b/common/TracyProtocol.hpp @@ -9,7 +9,7 @@ namespace tracy constexpr unsigned Lz4CompressBound( unsigned isize ) { return isize + ( isize / 255 ) + 16; } -enum : uint32_t { ProtocolVersion = 26 }; +enum : uint32_t { ProtocolVersion = 27 }; enum : uint32_t { BroadcastVersion = 0 }; using lz4sz_t = uint32_t; diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index 72a24ca8..169dcbc9 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -309,6 +309,7 @@ struct QueueCallstackFrame uint64_t name; uint64_t file; uint32_t line; + uint64_t symAddr; }; struct QueueCrashReport