程序员都知道,如果一个比较大型的程序突然奔溃了,那么怎么样快速的分析出问题的所在呢?一个很有效的方法就是查看程序运行日志,看看操作者究竟对程序做了哪些操作,以至于程序奔溃。今天在这里推荐一个很好用的文件日志类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/
