DebugDump.h
上传用户:chineseart
上传日期:2022-06-24
资源大小:52k
文件大小:4k
源码类别:

串口编程

开发平台:

Visual C++

  1. // DebugDump.h: interface for the CDebugDump class.
  2. #pragma once
  3. #include <fstream>
  4. #include <string>
  5. #define GAP _T("     ")
  6. class CDebugDump  
  7. {
  8. private:
  9. char m_szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
  10. std::ofstream m_fileDump;
  11. std::string m_szTitle;
  12. std::string m_szFileName;
  13. std::string m_szDir;
  14. BOOL m_bTraceToFile;
  15. BOOL m_bTraceToDebug;
  16. public:
  17. void SetTraceToFile(BOOL bOnOff)  
  18. {
  19. if (bOnOff == FALSE && m_bTraceToFile != bOnOff )
  20. {
  21. if ( m_fileDump.is_open ()) 
  22. {
  23. std::string szTimeStamp = GetTime();
  24. m_fileDump  << _T("Stopped  log on computer: ") << m_szComputerName <<  
  25. _T(" at ")<<szTimeStamp.c_str()  <<std::endl ;
  26. m_fileDump << _T("------------------------------------------------------------------------------------------------------") <<std::endl << std::endl ;
  27. }
  28. }
  29. m_bTraceToFile = bOnOff;
  30. };
  31. void SetTraceToDebug(BOOL bOnOff) 
  32. {
  33. m_bTraceToDebug = bOnOff;
  34. };
  35. CDebugDump()
  36. {
  37. m_bTraceToFile = TRUE;
  38. m_bTraceToDebug = TRUE;
  39. }
  40. virtual ~CDebugDump()
  41. {
  42. if (  m_fileDump.is_open ()) 
  43. {
  44. std::string szTimeStamp = GetTime(); m_fileDump <<std::endl << _T("Logging Ended : ")  _T(" at ")<<szTimeStamp.c_str()  <<std::endl ;
  45. m_fileDump << _T("------------------------------------------------------------------------------------------------------") << std::endl ;m_fileDump.close();
  46. }
  47. };
  48. inline void Init(std::string szDir = _T("c:\Temp\") ,std::string szFile= _T("SERIALCOMM"),std::string szTitle = _T("SerialComm:"))
  49. {
  50. m_szDir = szDir ;
  51. m_szFileName = szFile;
  52. m_szTitle = szTitle;
  53. std::string szFullPath(szDir);
  54. szFullPath.append (szFile);
  55. DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
  56. if ( !GetComputerName(m_szComputerName,&dwSize))
  57. dwSize = GetLastError ();
  58. if ( !m_fileDump.is_open ()) 
  59. {
  60. std::string szTimeStamp = GetTime();
  61. szFullPath.append ( GetTime(false) ); 
  62. szFullPath.append(".dmp");
  63. m_fileDump.open (szFullPath.c_str());
  64. m_fileDump  << _T("Starting log on computer: ") << m_szComputerName <<  
  65. _T(" at ")<<szTimeStamp.c_str()  <<std::endl ;
  66. m_fileDump << _T("------------------------------------------------------------------------------------------------------") <<std::endl << std::endl ;
  67. }
  68. }
  69. inline void Dump (LPCSTR lpszFormat, ...)
  70. {
  71. try
  72. {
  73. va_list args;
  74. va_start(args, lpszFormat);
  75. int nBuf;
  76. char szBuffer[8024];
  77. nBuf = _vsnprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
  78. ASSERT(nBuf < sizeof(szBuffer)); //Output truncated as it was > sizeof(szBuffer)
  79. std::string szTimeStamp = GetTime();
  80. char szThreadId[100];
  81. sprintf(szThreadId,"[%d] ",GetCurrentThreadId());
  82. if (m_bTraceToFile)
  83. {
  84. m_fileDump << szThreadId << m_szTitle << GAP << szTimeStamp.c_str() << GAP
  85. << szBuffer << std::endl ;
  86. }
  87. if (m_bTraceToDebug)
  88. {
  89. std::string szTemp (szThreadId);
  90. szTemp.append (m_szTitle);
  91. szTemp.append ( szBuffer );
  92. szTemp.append ( "n" );
  93. TRACE(szTemp.c_str ());
  94. }
  95. va_end(args);
  96. }
  97. catch(...)
  98. {
  99. ASSERT(0);
  100. }
  101. }
  102. inline std::string  GetTime(bool bLongTime  = true)
  103. {
  104. SYSTEMTIME tm;
  105. GetLocalTime(&tm);
  106. char szTime[100];
  107. if ( bLongTime ) sprintf(szTime,"%d/%d/%d  %d::%d::%d",tm.wMonth,tm.wDay,tm.wYear,tm.wHour,tm.wMinute,tm.wSecond);
  108. else sprintf(szTime,"%d%d%d_%d_%d_%d",tm.wMonth,tm.wDay,tm.wYear,tm.wHour,tm.wMinute,tm.wSecond);
  109. std::string sTime(szTime );
  110. return sTime;
  111. }
  112. };