| //===-- MIUtilDebug.cpp -----------------------------------------*- C++ -*-===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | // Third party headers: | 
 | #ifdef _WIN32 | 
 | #include <windows.h> | 
 | #endif | 
 |  | 
 | // In-house headers: | 
 | #include "MICmnLog.h" | 
 | #include "MIDriver.h" | 
 | #include "MIUtilDebug.h" | 
 |  | 
 | //++ | 
 | //------------------------------------------------------------------------------------ | 
 | // Details: CMIUtilDebug constructor. | 
 | // Type:    Method. | 
 | // Args:    None. | 
 | // Return:  None. | 
 | // Throws:  None. | 
 | //-- | 
 | CMIUtilDebug::CMIUtilDebug() {} | 
 |  | 
 | //++ | 
 | //------------------------------------------------------------------------------------ | 
 | // Details: CMIUtilDebug destructor. | 
 | // Type:    Method. | 
 | // Args:    None. | 
 | // Return:  None. | 
 | // Throws:  None. | 
 | //-- | 
 | CMIUtilDebug::~CMIUtilDebug() {} | 
 |  | 
 | //++ | 
 | //------------------------------------------------------------------------------------ | 
 | // 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() { | 
 |   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() { | 
 |   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() { | 
 |   const CMIUtilString txt( | 
 |       CMIUtilString::Format("%d<%s", ms_fnDepthCnt--, m_strFnName.c_str())); | 
 |   ms_rLog.Write(txt, CMICmnLog::eLogVerbosity_FnTrace); | 
 | } |