FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
stacktrace/example/throwing_st.cpp at develop · hktkdmp/stacktrace · GitHub
hktkdmp
/
stacktrace
Public
forked from
boostorg/stacktrace
Notifications
You must be signed in to change notification settings
Fork
0
Star
1
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
stacktrace
/
example
/
throwing_st.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
78 lines (64 loc) · 1.98 KB
Breadcrumbs
stacktrace
/
example
/
throwing_st.cpp
Copy path
File metadata and controls
78 lines (64 loc) · 1.98 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//
Copyright Antony Polukhin, 2016-2021.
//
//
Distributed under the Boost Software License, Version 1.0. (See
//
accompanying file LICENSE_1_0.txt or copy at
//
http://www.boost.org/LICENSE_1_0.txt)
#
include
<
boost/config.hpp
>
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
[getting_started_class_traced
#
include
<
boost/stacktrace.hpp
>
#
include
<
boost/exception/all.hpp
>
typedef
boost::error_info<
struct
tag_stacktrace
, boost::stacktrace::stacktrace> traced;
//
]
//
[getting_started_class_with_trace
template
<
class
E
>
void
throw_with_trace
(
const
E& e) {
throw
boost::enable_error_info
(e)
<<
traced
(
boost::stacktrace::stacktrace
());
}
//
]
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOST_NOINLINE
void
oops
(
int
i);
BOOST_NOINLINE
void
foo
(
int
i);
BOOST_NOINLINE
void
bar
(
int
i);
#
include
<
stdexcept
>
BOOST_NOINLINE
void
oops
(
int
i) {
//
[getting_started_throwing_with_trace
if
(i >=
4
)
throw_with_trace
(
std::out_of_range
(
"
'i' must be less than 4 in oops()
"
));
if
(i <=
0
)
throw_with_trace
(
std::logic_error
(
"
'i' must be greater than zero in oops()
"
));
//
]
foo
(i);
std::exit
(
1
);
}
#
include
<
boost/array.hpp
>
BOOST_NOINLINE
void
bar
(
int
i) {
boost::array<
int
,
5
> a = {{
0
,
0
,
0
,
0
,
0
}};
if
(i <
5
) {
if
(i >=
0
) {
foo
(a[i]);
}
else
{
oops
(i);
}
}
std::exit
(
2
);
}
BOOST_NOINLINE
void
foo
(
int
i) {
bar
(--i);
}
#
include
<
iostream
>
int
main
() {
//
[getting_started_catching_trace
try
{
foo
(
5
);
//
testing assert handler
}
catch
(
const
std::exception& e) {
std::cerr << e.
what
() <<
'
\n
'
;
const
boost::stacktrace::stacktrace* st = boost::get_error_info<traced>(e);
if
(st) {
std::cerr << *st <<
'
\n
'
;
/*
<-
*/
return
0
;
/*
->
*/
}
/*
<-
*/
return
3
;
/*
->
*/
}
//
]
return
5
;
}
Back
|
FazBrowse Home
|
New Git URL