init: init nachos hw01, should pass jenkins os_group_20_hw job but fail on os_group_20_ta job
This commit is contained in:
96
code/lib/debug.h
Normal file
96
code/lib/debug.h
Normal file
@@ -0,0 +1,96 @@
|
||||
// debug.h
|
||||
// Data structures for debugging routines.
|
||||
//
|
||||
// The debugging routines allow the user to turn on selected
|
||||
// debugging messages, controllable from the command line arguments
|
||||
// passed to Nachos (-d). You are encouraged to add your own
|
||||
// debugging flags. Please....
|
||||
//
|
||||
// Copyright (c) 1992-1996 The Regents of the University of California.
|
||||
// All rights reserved. See copyright.h for copyright notice and limitation
|
||||
// of liability and disclaimer of warranty provisions.
|
||||
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
|
||||
#include "copyright.h"
|
||||
#include "utility.h"
|
||||
#include "sysdep.h"
|
||||
|
||||
// The pre-defined debugging flags are:
|
||||
|
||||
const char dbgAll = '+'; // turn on all debug messages
|
||||
const char dbgThread = 't'; // threads
|
||||
const char dbgSynch = 's'; // locks, semaphores, condition vars
|
||||
const char dbgInt = 'i'; // interrupt emulation
|
||||
const char dbgMach = 'm'; // machine emulation
|
||||
const char dbgDisk = 'd'; // disk emulation
|
||||
const char dbgFile = 'f'; // file system
|
||||
const char dbgAddr = 'a'; // address spaces
|
||||
const char dbgNet = 'n'; // network emulation
|
||||
const char dbgSys = 'u'; // systemcall
|
||||
|
||||
class Debug {
|
||||
public:
|
||||
Debug(char *flagList);
|
||||
|
||||
bool IsEnabled(char flag);
|
||||
|
||||
private:
|
||||
char *enableFlags; // controls which DEBUG messages are printed
|
||||
};
|
||||
|
||||
extern Debug *debug;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DEBUG
|
||||
// If flag is enabled, print a message.
|
||||
//----------------------------------------------------------------------
|
||||
#define DEBUG(flag,expr) \
|
||||
if (!debug->IsEnabled(flag)) {} else { \
|
||||
cerr << expr << "\n"; \
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ASSERT
|
||||
// If condition is false, print a message and dump core.
|
||||
// Useful for documenting assumptions in the code.
|
||||
//
|
||||
// NOTE: needs to be a #define, to be able to print the location
|
||||
// where the error occurred.
|
||||
//----------------------------------------------------------------------
|
||||
#define ASSERT(condition) \
|
||||
if (condition) {} else { \
|
||||
cerr << "Assertion failed: line " << __LINE__ << " file " << __FILE__ << "\n"; \
|
||||
Abort(); \
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ASSERTNOTREACHED
|
||||
// Print a message and dump core (equivalent to ASSERT(FALSE) without
|
||||
// making the compiler whine). Useful for documenting when
|
||||
// code should not be reached.
|
||||
//
|
||||
// NOTE: needs to be a #define, to be able to print the location
|
||||
// where the error occurred.
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define ASSERTNOTREACHED() \
|
||||
{ \
|
||||
cerr << "Assertion failed: line " << __LINE__ << " file " << __FILE__ << "\n"; \
|
||||
Abort(); \
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ASSERTUNIMPLEMENTED
|
||||
// Print a message that unimplemented code is executed and dump core
|
||||
//----------------------------------------------------------------------
|
||||
#define UNIMPLEMENTED() \
|
||||
{ \
|
||||
cerr << "Reached UNIMPLEMENTED function " << __FUNCTION__ << " in file: " \
|
||||
<< __FILE__ << " line: " << __LINE__ << ".\n"; \
|
||||
}
|
||||
|
||||
#endif // DEBUG_H
|
||||
Reference in New Issue
Block a user