split out assert from debug.h

This commit is contained in:
Mathieu Lacage
2007-02-16 09:00:22 +01:00
parent 06788bac27
commit 50a1e7d737
6 changed files with 145 additions and 77 deletions

View File

@@ -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'
])

View File

@@ -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
View 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
View 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 */

View File

@@ -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

View File

@@ -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 */