CommonLib
Loading...
Searching...
No Matches
StackFrameWin32.h
Go to the documentation of this file.
1#pragma once
2
3#include <filesystem>
4#include <sstream>
5#include <string>
6
7#include <CommonLib.h>
8
9namespace hedgedev::csl::diag
10{
12 {
13 public:
14 void SetSymbolInfo(SYMBOL_INFO* in_pSymbolInfo, size_t in_displacement)
15 {
16 if (!in_pSymbolInfo)
17 return;
18
19 pModuleBase = (void*)in_pSymbolInfo->ModBase;
20
21 SymbolInfo.pAddress = (void*)in_pSymbolInfo->Address;
22
23 if (in_pSymbolInfo->NameLen > 0)
24 SymbolInfo.Name = std::string(in_pSymbolInfo->Name, in_pSymbolInfo->NameLen);
25
26 SymbolInfo.Flags = in_pSymbolInfo->Flags;
27 SymbolInfo.Displacement = in_displacement;
28
29 m_hasSymbolInfo = true;
30 }
31
32 void SetLineInfo(IMAGEHLP_LINE* in_pLineInfo)
33 {
34 if (!in_pLineInfo)
35 return;
36
37 LineInfo.SourceFilePath = in_pLineInfo->FileName;
38 LineInfo.pAddress = (void*)in_pLineInfo->Address;
39 LineInfo.Row = in_pLineInfo->LineNumber;
40
41 m_hasLineInfo = true;
42 }
43
44 std::string ToString() const
45 {
46 std::stringstream result{};
47
48 const auto& rModulePath = GetModulePath();
49
50 if (!rModulePath.empty())
51 result << rModulePath.filename().string() << '!';
52
53 if (!SymbolInfo.Name.empty())
54 {
55 result << SymbolInfo.Name;
56
57 if (SymbolInfo.Displacement > 0)
58 result << '+' << ut::string::ToHex<std::string>(SymbolInfo.Displacement, 2);
59 }
60 else
61 {
62 result << ut::string::ToHex<std::string>(size_t(pProgramCounter));
63 }
64
65 return result.str();
66 }
67 };
68}
Definition StackFrameWin32.h:12
std::string ToString() const
Definition StackFrameWin32.h:44
void SetLineInfo(IMAGEHLP_LINE *in_pLineInfo)
Definition StackFrameWin32.h:32
void SetSymbolInfo(SYMBOL_INFO *in_pSymbolInfo, size_t in_displacement)
Definition StackFrameWin32.h:14
Definition StackFrame.h:11
void * pModuleBase
Definition StackFrame.h:21
bool m_hasLineInfo
Definition StackFrame.h:17
bool m_hasSymbolInfo
Definition StackFrame.h:16
void * pProgramCounter
Definition StackFrame.h:20
Definition String.h:8