程序员都知道,如果一个比较大型的程序突然奔溃了,那么怎么样快速的分析出问题的所在呢?一个很有效的方法就是查看程序运行日志,看看操作者究竟对程序做了哪些操作,以至于程序奔溃。今天在这里推荐一个很好用的文件日志类Clog,该类来自于Codeprojct,可自行去搜索下载,这里我简单的说明下怎么使用。
演示程序框架
上面是演示程序的基本框架,演示程序是基于对话框的,在程序的全局类theApp类中加入了Log文件类,并提供日志类接口writeLog函数,在对话框类中重载了PreTranslateMessage函数,这样就可以监视所有由对话框类发出的消息,在该函数里调用日志函数,就可以记录下所有程序的操作,下面简单介绍一下演示程序开发流程。
一、新建一个基于对话框的工程testlog,在对话框里面随意添加一些基本控件。
二、将日志文件类导入到工程中。
由于我的日志文件类不在该程序的目录下,所以要在工程属性中添加格外的路径:
三、在theApp类中添加日志接口函数writeLog()。
//1)添加日志文件头文件包含 #include "Log.h" // 添加头文件 //2)在类中添加日志文件类以及函数声明 private: CString m_strPath; // log 文件路径 CFileLogAppender * m_pLogAppender; CLog* m_pLog; //log文件类 CCriticalSection m_SectionLog; //为了让log函数同时只能一次触发 public: bool writeLog(nsCLog::eSeverity severity, CString message); //3)在theApp类构造函数中添加类初始化说明 m_strPath=GetApplicationPath(); m_strPath+=_T("\\log\\testlog"); m_pLogAppender=new CFileLogAppender(nsCLog::info, m_strPath.GetBuffer()); m_pLog=new CLog(_T("administrator")); m_pLog->addAppender(m_pLogAppender); writeLog(nsCLog::info,"begin log"); m_strPath.ReleaseBuffer(); //4)添加函数writeLog定义 bool CtestlogApp::writeLog(nsCLog::eSeverity severity, CString message) { m_SectionLog.Lock(); if( m_pLog != NULL) { m_pLog->writeFileLog(severity,message); } m_SectionLog.Unlock(); return true; } //这个函数可以在程序的任何地方调用!
四、在对话框类中重载PreTranslateMessage,记录程序操作。
- void AddLog(UINT nCode,UINT nID); //添加log日志函数
- 重载PreTranslateMessage函数并将鼠标左键单击按下消息以及按键按下消息截取,然后调用AddLog函数将操作记录下来,下面是实现:
BOOL CtestlogDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class UINT nID = ::GetDlgCtrlID(pMsg->hwnd); UINT nChar=pMsg->wParam; CString strValue; bool bInput=false; GetDlgItemText(nID,strValue); if (pMsg->message==WM_LBUTTONDOWN) //左键单击 { AddLog(pMsg->message,nID); } if (pMsg->message==WM_KEYDOWN) //键按下 { if(GetDlgItem(nID) != NULL && GetDlgItem(nID)->IsKindOf(RUNTIME_CLASS(CButton)) && (pMsg->wParam == VK_SPACE || pMsg->wParam == VK_RETURN)) AddLog(pMsg->message,nID); } return CDialog::PreTranslateMessage(pMsg); }
编译运行之后随便点击对话框里的各种控件,在程序运行目下下的日志文件中就可以看到被记录下来的各种操作,如下图:
程序运行后,可以看到Log文件记录了对程序进行的左右操作。
本演示程序在XP环境下,VS2008下开发,如果有需要在以下网址下载,免注册:http://qiannao.com/file/keji1991/21b6774b/