Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F386780
debug.hpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Size
3 KB
Referenced Files
None
Subscribers
None
debug.hpp
View Options
/*******************************************************************************
*
* File: debug.hpp
*
* Contents: Facility for debugging
*
* Copyright 2017
*
* Author: David Juhasz (david.juhasz@tuwien.ac.at)
*
******************************************************************************/
#ifndef ROSA_SUPPORT_DEBUG_HPP
#define ROSA_SUPPORT_DEBUG_HPP
#include
"rosa/config/config.h"
#include
"rosa/support/type_helper.hpp"
#include
"rosa/support/terminal_colors.h"
#include
<array>
#include
<ostream>
namespace
rosa
{
// Returns an output stream to use for debugging.
std
::
ostream
&
dbgs
(
void
);
// Prints an array to the ostream.
template
<
typename
T
,
size_t
size
>
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
std
::
array
<
T
,
size
>
&
arr
)
{
os
<<
'['
;
for
(
unsigned
I
=
0
;
I
<
size
;
++
I
)
{
if
(
I
)
{
os
<<
','
;
}
os
<<
(
PRINTABLE
(
T
))
arr
[
I
];
}
os
<<
']'
;
return
os
;
}
}
// End namespace rosa
#ifndef ROSA_ENABLE_ASSERTIONS
#define ASSERT(stmt) ROSA_IGNORE_UNUSED(stmt)
#elif defined(ROSA_WINDOWS)
#define ASSERT(stmt) \
if (static_cast<bool>(stmt) == false) { \
rosa::dbgs() << rosa::terminal::Color::Default << __FILENAME__ << ":" \
<< __LINE__ << ": requirement failed: '" << #stmt << "'" \
<< std::endl; \
::abort(); \
} \
ROSA_VOID_STMT
#else
// defined(ROSA_LINUX)
#include
<execinfo.h>
#define ASSERT(stmt) \
if (static_cast<bool>(stmt) == false) { \
rosa::dbgs() << rosa::terminal::Color::Default << __FILENAME__ << ":" \
<< __LINE__ << ": requirement failed: '" << #stmt << "'" \
<< std::endl; \
void *array[20]; \
auto bt_size = ::backtrace(array, 20); \
::backtrace_symbols_fd(array, bt_size, 2); \
::abort(); \
} \
ROSA_VOID_STMT
#endif
// defined(ROSA_ENABLE_ASSERTIONS)
#ifndef NDEBUG
#define DEBUG(X) \
do { \
X; \
} while (false)
#define DEBUGVAR(V) \
do { \
rosa::dbgs() << rosa::terminal::Color::Default << #V << " (" \
<< __FILENAME__ << ":" << __LINE__ << "): " << (V) \
<< std::endl; \
} while (false)
#else
// defined(NDEBUG)
#define DEBUG(X) ROSA_IGNORE_UNUSED(X)
#define DEBUGVAR(X) ROSA_IGNORE_UNUSED(X)
#endif
// defined(NDEBUG)
// Static assertions are always emitted to the code.
#define STATIC_ASSERT(COND, DIAG) static_assert((COND), DIAG)
#endif
// ROSA_SUPPORT_DEBUG_HPP
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Fri, Jul 4, 7:45 AM (1 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
157532
Default Alt Text
debug.hpp (3 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment