split out assert from debug.h
This commit is contained in:
@@ -19,6 +19,7 @@ core.add_sources([
|
||||
'reference-list-test.cc',
|
||||
'callback-test.cc',
|
||||
'debug.cc',
|
||||
'assert.cc',
|
||||
'ptr.cc',
|
||||
'test.cc'
|
||||
])
|
||||
@@ -41,6 +42,7 @@ core.add_inst_headers([
|
||||
'callback.h',
|
||||
'ptr.h',
|
||||
'debug.h',
|
||||
'assert.h',
|
||||
'test.h'
|
||||
])
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
#include "ns3/debug.h"
|
||||
#include "ns3/assert.h"
|
||||
|
||||
NS_DEBUG_COMPONENT_DEFINE ("MyComponentA");
|
||||
|
||||
|
||||
41
src/core/assert.cc
Normal file
41
src/core/assert.cc
Normal file
@@ -0,0 +1,41 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2006 INRIA
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
void
|
||||
AssertBreakpoint (void)
|
||||
{
|
||||
int *a = 0;
|
||||
/**
|
||||
* we test here to allow a debugger to change the value of
|
||||
* the variable 'a' to allow the debugger to avoid the
|
||||
* subsequent segfault.
|
||||
*/
|
||||
if (a == 0)
|
||||
{
|
||||
*a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
95
src/core/assert.h
Normal file
95
src/core/assert.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2006 INRIA
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#ifndef ASSERT_H
|
||||
#define ASSERT_H
|
||||
|
||||
/**
|
||||
* \defgroup assert
|
||||
* \brief assert functions and macros
|
||||
*
|
||||
* The assert macros are used to verify
|
||||
* at runtime that a certain condition is true. If it is
|
||||
* not true, the program halts. These checks are built
|
||||
* into the program only in debugging builds. They are
|
||||
* removed in optimized builds.
|
||||
*/
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
*
|
||||
* When an NS_ASSERT cannot verify its condition,
|
||||
* this function is called. This is where you should
|
||||
* be able to put a breakpoint with a debugger if
|
||||
* you want to catch assertions before the program
|
||||
* halts.
|
||||
*/
|
||||
void AssertBreakpoint (void);
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
#ifdef NS3_ASSERT_ENABLE
|
||||
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* \ingroup assert
|
||||
* \param condition condition to verifiy.
|
||||
*
|
||||
* At runtime, in debugging builds, if this condition is not
|
||||
* true, the program prints the source file, line number and
|
||||
* unverified condition and halts in the ns3::AssertBreakpoint
|
||||
* function.
|
||||
*/
|
||||
#define NS_ASSERT(condition) \
|
||||
if (!(condition)) \
|
||||
{ \
|
||||
std::cout << "assert failed. file=" << __FILE__ << \
|
||||
", line=" << __LINE__ << ", cond=\""#condition << \
|
||||
"\"" << std::endl; \
|
||||
ns3::AssertBreakpoint (); \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup assert
|
||||
* \param condition condition to verifiy.
|
||||
* \param message message to output
|
||||
*
|
||||
* At runtime, in debugging builds, if this condition is not
|
||||
* true, the program prints the message to output and
|
||||
* halts in the ns3::AssertBreakpoint function.
|
||||
*/
|
||||
#define NS_ASSERT_MSG(condition, message) \
|
||||
if (!(condition)) \
|
||||
{ \
|
||||
std::cout << message << std::endl; \
|
||||
ns3::AssertBreakpoint (); \
|
||||
}
|
||||
|
||||
#else /* NS3_ASSERT_ENABLE */
|
||||
|
||||
#define NS_ASSERT(cond)
|
||||
#define NS_ASSERT_MSG(cond,msg)
|
||||
|
||||
#endif /* NS3_ASSERT_ENABLE */
|
||||
|
||||
#endif /* ASSERT_H */
|
||||
@@ -96,7 +96,7 @@ DebugComponentEnableEnvVar (void)
|
||||
}
|
||||
|
||||
|
||||
DebugComponent::DebugComponent (std::string name)
|
||||
DebugComponent::DebugComponent (char const * name)
|
||||
: m_isEnabled (false)
|
||||
{
|
||||
for (ComponentListI i = g_components.begin ();
|
||||
@@ -168,22 +168,6 @@ DebugComponentPrintList (void)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AssertBreakpoint (void)
|
||||
{
|
||||
int *a = 0;
|
||||
/**
|
||||
* we test here to allow a debugger to change the value of
|
||||
* the variable 'a' to allow the debugger to avoid the
|
||||
* subsequent segfault.
|
||||
*/
|
||||
if (a == 0)
|
||||
{
|
||||
*a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
|
||||
|
||||
@@ -21,22 +21,10 @@
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* \defgroup debugging
|
||||
* \brief Debugging functions and macros
|
||||
*
|
||||
* The ns3 debugging support provides a few simple macros
|
||||
* for debugging and sending out messages to the user. There
|
||||
* two classes of functionality:
|
||||
* - ASSERT functionality: macros which are used to verify
|
||||
* at runtime that a certain condition is true. If it is
|
||||
* not true, the program halts. These checks are built
|
||||
* into the program only in debugging builds. They are
|
||||
* removed in optimized builds.
|
||||
*
|
||||
* - DEBUG functionality: macros which allow developers to
|
||||
* send information out on screen only in debugging builds.
|
||||
* All debug messages are disabled by default. To enable
|
||||
@@ -75,7 +63,7 @@ void DebugComponentPrintList (void);
|
||||
|
||||
class DebugComponent {
|
||||
public:
|
||||
DebugComponent (std::string name);
|
||||
DebugComponent (char const *name);
|
||||
bool IsEnabled (void);
|
||||
void Enable (void);
|
||||
void Disable (void);
|
||||
@@ -83,22 +71,15 @@ private:
|
||||
bool m_isEnabled;
|
||||
};
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
*
|
||||
* When an NS_ASSERT cannot verify its condition,
|
||||
* this function is called. This is where you should
|
||||
* be able to put a breakpoint with a debugger if
|
||||
* you want to catch assertions before the program
|
||||
* halts.
|
||||
*/
|
||||
void AssertBreakpoint (void);
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
|
||||
#ifdef NS3_DEBUG_ENABLE
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* \param name a string
|
||||
@@ -130,46 +111,10 @@ void AssertBreakpoint (void);
|
||||
std::cout << msg << std::endl; \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* \param condition condition to verifiy.
|
||||
*
|
||||
* At runtime, in debugging builds, if this condition is not
|
||||
* true, the program prints the source file, line number and
|
||||
* unverified condition and halts in the ns3::AssertBreakpoint
|
||||
* function.
|
||||
*/
|
||||
#define NS_ASSERT(condition) \
|
||||
if (!(condition)) \
|
||||
{ \
|
||||
std::cout << "assert failed. file=" << __FILE__ << \
|
||||
", line=" << __LINE__ << ", cond=\""#condition << \
|
||||
"\"" << std::endl; \
|
||||
ns3::AssertBreakpoint (); \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup debugging
|
||||
* \param condition condition to verifiy.
|
||||
* \param message message to output
|
||||
*
|
||||
* At runtime, in debugging builds, if this condition is not
|
||||
* true, the program prints the message to output and
|
||||
* halts in the ns3::AssertBreakpoint function.
|
||||
*/
|
||||
#define NS_ASSERT_MSG(condition, message) \
|
||||
if (!(condition)) \
|
||||
{ \
|
||||
std::cout << message << std::endl; \
|
||||
ns3::AssertBreakpoint (); \
|
||||
}
|
||||
|
||||
#else /* NS3_DEBUG_ENABLE */
|
||||
|
||||
#define NS_DEBUG_COMPONENT_DEFINE(name)
|
||||
#define NS_DEBUG(x)
|
||||
#define NS_ASSERT(cond)
|
||||
#define NS_ASSERT_MSG(cond,msg)
|
||||
|
||||
#endif /* NS3_DEBUG_ENABLE */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user