//===-- MIUtilDebug.cpp -----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// //++ // File: MIUtilDebug.h // // Overview: Terminal setting termios functions. // // Environment: Compilers: Visual C++ 12. // gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 // Libraries: See MIReadmetxt. // // Copyright: None. //-- // Third party headers: #ifdef _WIN32 #include #endif // In-house headers: #include "MIUtilDebug.h" #include "MIDriver.h" #include "MICmnLog.h" //++ ------------------------------------------------------------------------------------ // Details: CMIUtilDebug constructor. // Type: Method. // Args: None. // Return: None. // Throws: None. //-- CMIUtilDebug::CMIUtilDebug( void ) { } //++ ------------------------------------------------------------------------------------ // Details: CMIUtilDebug destructor. // Type: Method. // Args: None. // Return: None. // Throws: None. //-- CMIUtilDebug::~CMIUtilDebug( void ) { } //++ ------------------------------------------------------------------------------------ // Details: Show a dialog to the process/application halts. It gives the opportunity to // attach a debugger. // Type: Static method. // Args: None. // Return: None. // Throws: None. //-- void CMIUtilDebug::ShowDlgWaitForDbgAttach( void ) { const CMIUtilString strCaption( CMIDriver::Instance().GetAppNameShort() ); #ifdef _WIN32 ::MessageBoxA( NULL, "Attach your debugger now", strCaption.c_str(), MB_OK ); #else // ToDo: Implement other platform version of an Ok to continue dialog box #endif // _WIN32 } //++ ------------------------------------------------------------------------------------ // Details: Temporarily stall the process/application to give the programmer the // opportunity to attach a debugger. How to use: Put a break in the programmer // where you want to visit, run the application then attach your debugger to the // application. Hit the debugger's pause button and the debugger should should // show this loop. Change the i variable value to break out of the loop and // visit your break point. // Type: Static method. // Args: None. // Return: None. // Throws: None. //-- void CMIUtilDebug::WaitForDbgAttachInfinteLoop( void ) { MIuint i = 0; while( i == 0 ) { const std::chrono::milliseconds time( 100 ); std::this_thread::sleep_for( time ); } } //--------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------- // Instantiations: CMICmnLog & CMIUtilDebugFnTrace::ms_rLog = CMICmnLog::Instance(); MIuint CMIUtilDebugFnTrace::ms_fnDepthCnt = 0; //++ ------------------------------------------------------------------------------------ // Details: CMIUtilDebugFnTrace constructor. // Type: Method. // Args: vFnName - (R) The text to insert into the log. // Return: None. // Throws: None. //-- CMIUtilDebugFnTrace::CMIUtilDebugFnTrace( const CMIUtilString & vFnName ) : m_strFnName( vFnName ) { const CMIUtilString txt( CMIUtilString::Format( "%d>%s", ++ms_fnDepthCnt, m_strFnName.c_str() ) ); ms_rLog.Write( txt, CMICmnLog::eLogVerbosity_FnTrace ); } //++ ------------------------------------------------------------------------------------ // Details: CMIUtilDebugFnTrace destructor. // Type: Method. // Args: None. // Return: None. // Throws: None. //-- CMIUtilDebugFnTrace::~CMIUtilDebugFnTrace( void ) { const CMIUtilString txt( CMIUtilString::Format( "%d<%s", ms_fnDepthCnt--, m_strFnName.c_str() ) ); ms_rLog.Write( txt, CMICmnLog::eLogVerbosity_FnTrace ); }