test
rectrace.cpp
Go to the documentation of this file.
1
/*
2
* test/rectrace.cpp
3
* Copyright 2013 Google Inc. All Rights Reserved.
4
*
5
* Permission is hereby granted, free of charge, to any person obtaining a copy
6
* of this software and associated documentation files (the "Software"), to deal
7
* in the Software without restriction, including without limitation the rights
8
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
* copies of the Software, and to permit persons to whom the Software is
10
* furnished to do so, subject to the following conditions:
11
*
12
* The above copyright notice and this permission notice shall be included in
13
* all copies or substantial portions of the Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
* SOFTWARE.
22
*/
23
24
#include <
backward_ros/backward.hpp
>
25
#include <stdio.h>
26
#include "
test.hpp
"
27
28
using namespace
backward
;
29
30
typedef
StackTrace
stacktrace_t
;
31
32
void
end_of_our_journey
(
stacktrace_t
& st) {
33
if
(not st.
size
()) {
34
st.
load_here
();
35
}
36
}
37
38
int
rec
(
stacktrace_t
& st,
int
level) {
39
if
(level <= 1) {
40
end_of_our_journey
(st);
41
return
0;
42
}
43
return
rec
(st, level - 1);
44
}
45
46
namespace
toto
{
47
48
namespace
titi {
49
50
struct
foo
{
51
52
union
bar
{
53
__attribute__
((noinline))
54
static
int
trampoline(
stacktrace_t
& st,
int
level) {
55
return
rec
(st, level);
56
}
57
};
58
};
59
60
}
// namespace titi
61
62
}
// namespace toto
63
64
TEST
(recursion) {
65
{
// lexical scope.
66
stacktrace_t
st;
67
const
int
input = 3;
68
int
r = toto::titi::foo::bar::trampoline(st, input);
69
70
std::cout <<
"rec("
<< input <<
") == "
<< r << std::endl;
71
72
Printer
printer;
73
// printer.address = true;
74
printer.
object
=
true
;
75
printer.
print
(st, stdout);
76
}
77
}
78
79
int
fib
(
StackTrace
& st,
int
level) {
80
if
(level == 2) {
81
return
1;
82
}
83
if
(level <= 1) {
84
end_of_our_journey
(st);
85
return
0;
86
}
87
return
fib
(st, level - 1) +
fib
(st, level - 2);
88
}
89
90
TEST
(fibrecursive) {
91
StackTrace
st;
92
const
int
input = 6;
93
int
r =
fib
(st, input);
94
95
std::cout <<
"fib("
<< input <<
") == "
<< r << std::endl;
96
97
Printer
printer;
98
printer.
print
(st, stdout);
99
}
backward::StackTrace
Definition:
backward.hpp:1207
stacktrace_t
StackTrace stacktrace_t
Definition:
rectrace.cpp:30
backward::Printer
Definition:
backward.hpp:3968
TEST
TEST(recursion)
Definition:
rectrace.cpp:64
end_of_our_journey
void end_of_our_journey(stacktrace_t &st)
Definition:
rectrace.cpp:32
backward::StackTraceImpl::size
size_t size() const
Definition:
backward.hpp:712
__attribute__
__attribute__((noinline)) void a(StackTrace &st)
Definition:
stacktrace.cpp:54
backward::Printer::object
bool object
Definition:
backward.hpp:3973
rec
int rec(stacktrace_t &st, int level)
Definition:
rectrace.cpp:38
toto
Definition:
rectrace.cpp:46
toto::titi::foo::bar
Definition:
rectrace.cpp:52
backward.hpp
test.hpp
fib
int fib(StackTrace &st, int level)
Definition:
rectrace.cpp:79
toto::titi::foo
Definition:
rectrace.cpp:50
backward::StackTraceImpl::load_here
size_t load_here(size_t=0)
Definition:
backward.hpp:714
backward::Printer::print
FILE * print(ST &st, FILE *fp=stderr)
Definition:
backward.hpp:3981
backward
Definition:
backward.hpp:419
backward_ros
Author(s):
autogenerated on Tue Mar 1 2022 23:50:48