From 13f107da2e7935869c3f32dc61b19b85d7144939 Mon Sep 17 00:00:00 2001 From: DCHii <13780064348@163.com> Date: Sat, 25 May 2024 15:14:25 +0800 Subject: [PATCH] When the address cannot be found, do not return nullptr --- symbol/symbol.cpp | 2 +- symbol/symbol_resolve.cpp | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/symbol/symbol.cpp b/symbol/symbol.cpp index e30b5a3..699dca8 100644 --- a/symbol/symbol.cpp +++ b/symbol/symbol.cpp @@ -79,7 +79,7 @@ void SymResolverDestroy() SymbolResolve::GetInstance()->Clear(); } -struct Stack* StackToHash(int pid, unsigned long* stack, int nr) +struct Stack* StackToHash(int pid, unsigned long* stack, int nr) { try { return SymbolResolve::GetInstance()->StackToHash(pid, stack, nr); diff --git a/symbol/symbol_resolve.cpp b/symbol/symbol_resolve.cpp index 504e526..eb9042d 100644 --- a/symbol/symbol_resolve.cpp +++ b/symbol/symbol_resolve.cpp @@ -61,6 +61,7 @@ const std::string R_XP = "r-xp"; const std::string SLASH = "/"; const char DASH = '-'; const char EXE_TYPE = 'x'; +char* UNKNOWN = "UNKNOWN"; namespace { static inline void SetFalse(bool& flag) @@ -90,6 +91,16 @@ namespace { return str; } + static inline Symbol* InitializeSymbol(unsigned long addr) { + struct Symbol* symbol = new struct Symbol(); + symbol->module = UNKNOWN; + symbol->symbolName = UNKNOWN; + symbol->fileName = UNKNOWN; + symbol->addr = addr; + symbol->offset = 0; + return symbol; + } + static void ReadProcPidMap(std::ifstream& file, std::vector>& modVec) { char line[MAX_LINUX_SYMBOL_LEN]; @@ -269,15 +280,15 @@ namespace { void SymbolUtils::FreeSymbol(struct Symbol* symbol) { - if (symbol->symbolName) { + if (symbol->symbolName && symbol->symbolName != UNKNOWN) { delete[] symbol->symbolName; symbol->symbolName = nullptr; } - if (symbol->fileName) { + if (symbol->fileName && symbol->fileName != UNKNOWN) { delete[] symbol->fileName; symbol->fileName = nullptr; } - if (symbol->module) { + if (symbol->module && symbol->fileName != UNKNOWN) { delete[] symbol->module; symbol->module = nullptr; } @@ -815,7 +826,7 @@ struct Stack* SymbolResolve::StackToHash(int pid, unsigned long* stack, int nr) if (symbol != nullptr) { current->symbol = symbol; } else { - current->symbol = nullptr; + current->symbol = InitializeSymbol(stack[i]); } AddDoubleLinkedTail(&head, ¤t); } -- Gitee