CommonLib
Toggle main menu visibility
Loading...
Searching...
No Matches
stack_frame_win32.h
Go to the documentation of this file.
1
#
pragma
once
2
3
#
include
<
DbgHelp
.
h
>
4
#
pragma
comment
(
lib
,
"dbghelp.lib"
)
5
6
#
include
<
sstream
>
7
#
include
<
string
>
8
9
#
include
"diag/stack_frame.h"
10
#
include
"host/common.h"
11
12
namespace
hedgedev::csl::diag
13
{
14
class
stack_frame_win32
:
public
stack_frame
15
{
16
public
:
17
void
set_symbol_info
(SYMBOL_INFO* in_symbol_info, uint64_t in_displacement)
18
{
19
if
(!in_symbol_info)
20
return
;
21
22
module_base
=
reinterpret_cast
<
void
*>(in_symbol_info->ModBase);
23
24
symbol_info.address =
reinterpret_cast
<
void
*>(in_symbol_info->Address);
25
26
if
(in_symbol_info->NameLen > 0)
27
symbol_info.name = std::string(in_symbol_info->Name, in_symbol_info->NameLen);
28
29
symbol_info.flags = in_symbol_info->Flags;
30
symbol_info.displacement = in_displacement;
31
32
m_has_symbol_info
=
true
;
33
}
34
35
void
set_line_info
(IMAGEHLP_LINE* in_line_info)
36
{
37
if
(!in_line_info)
38
return
;
39
40
line_info.source_file_path = in_line_info->FileName;
41
line_info.address =
reinterpret_cast
<
void
*>(in_line_info->Address);
42
line_info.row = in_line_info->LineNumber;
43
44
m_has_line_info
=
true
;
45
}
46
47
std::string
str
()
const
48
{
49
std::stringstream result{};
50
51
const
auto
& module_path = get_module_path();
52
53
if
(!module_path.empty())
54
result << module_path.filename().string() <<
'!'
;
55
56
if
(!symbol_info.name.empty())
57
{
58
result << symbol_info.name;
59
60
if
(symbol_info.displacement > 0)
61
result <<
'+'
<< ut::string::hex<std::string>(symbol_info.displacement, 2);
62
}
63
else
64
{
65
result << ut::string::hex<std::string>(size_t(program_counter));
66
}
67
68
return
result.str();
69
}
70
};
71
}
hedgedev::csl::diag::stack_frame_win32
Definition
stack_frame_win32.h:15
hedgedev::csl::diag::stack_frame_win32::str
std::string str() const
Definition
stack_frame_win32.h:47
hedgedev::csl::diag::stack_frame_win32::set_symbol_info
void set_symbol_info(SYMBOL_INFO *in_symbol_info, uint64_t in_displacement)
Definition
stack_frame_win32.h:17
hedgedev::csl::diag::stack_frame_win32::set_line_info
void set_line_info(IMAGEHLP_LINE *in_line_info)
Definition
stack_frame_win32.h:35
hedgedev::csl::diag::stack_frame
Definition
stack_frame.h:11
hedgedev::csl::diag::stack_frame::m_has_line_info
bool m_has_line_info
Definition
stack_frame.h:17
hedgedev::csl::diag::stack_frame::module_base
void * module_base
Definition
stack_frame.h:21
hedgedev::csl::diag::stack_frame::m_has_symbol_info
bool m_has_symbol_info
Definition
stack_frame.h:16
include
diag
os
stack_frame_win32.h
Generated by
1.18.0