这是一个在MFC程序调试中很有用的小函数,可以输出字符消息,并记录时间,而且不像Afxmessage那样,它不会阻塞
头文件,可以是全局也可以放在某个类里面,无论在哪里,只需要声明这个就行
BOOL TestLog(CString csText);
cpp文件,这里需要导入一些头文件
#include <string>//std下使用string类型
#include<fstream>//对文件进行操作的头文件
using namespace std;//如果没有这个,需要在某些资源前面声明std的作用域,如用string 创建变量的时候
BOOL TestLog(CString csText)
{
csText += +_T("\r");
std::string sText = CW2A(csText.GetString());
SYSTEMTIME st;
char* cDat = new char[1024];
char* cTime = new char[1024];
char* cValue = new char[1024];
char* cText = new char[1024];
ZeroMemory(cDat, 1024); //数组初始化,如果不初始化会乱码
ZeroMemory(cTime, 1024);
ZeroMemory(cValue, 1024);
ZeroMemory(cText, 1024);
std::string sPathName;
GetLocalTime(&st);//获取系统日期
std::sprintf(cDat, "%.4d-%.2d-%.2d", st.wYear, st.wMonth, st.wDay); //将整型变量转换成字符串
std::sprintf(cTime, "%.2d:%.2d:%.2d ", st.wHour, st.wMinute, st.wSecond);
std::sprintf(cValue, "%s %s", cDat, cTime); //将字符串合并
sText = cTime + sText;
std::sprintf(cText, sText.c_str()); //string赋值给char*
sPathName = cDat;
sPathName = "TestLog\\" + sPathName + ".txt";//最终的路径
std::ofstream OutFile;
OutFile.open(sPathName, std::fstream::out | std::fstream::app);//写入,创建,追加
OutFile.write(cText, strlen(cText));
OutFile.close();
cDat = NULL;//因为要经常调用,记得释放资源
cTime = NULL;
cValue = NULL;
cText = NULL;
delete[] cDat;
delete[] cTime;
delete[] cValue;
delete[] cText;
return true;
}
然后直接调用就好了,像当一个函数出现闪退的时候,你可以使用这个函数打印出消息,当到达出问题的语句时就不再输出了
注意,使用之前需要先创建TestLog文件夹,这个文件夹的路径是指定的,如果是编译好的软件环境里使用,其路径应该放在与".exe"同一级的目录,而如果是vs直接调试,则放在与你的".rc"同一级的目录
刚刚运行的效果是:
如果sprintf报错,那就去项目属性-》C++下面把sdl检查关掉