在进行麒麟系统上中望CAD二次开发时,需要进行调试,但在CAD中显示不方便,于是写了一个打印调试信息到本地文件的函数,发出来,供大家参考。
#include <qtextstream.h>
#include <qdatetime.h>
#include <dlfcn.h>
#include <QFile>
#include <QDir>
/*************************************************
Description: // 获取函数运行信息
Input: // func - 函数指针
*************************************************/
QString identify_function_ptr(void* func)
{
Dl_info info;
int rc = dladdr(func,&info);
return info.dli_fname;
}
/*************************************************
Description: // 打印调试信息到文本文件
Input: // outSt - 字符 filename - 文件名
*************************************************/
void DPrintfToFile(QString outSt,QString filename)
{
//默认文件名
if(filename=="")
{
filename = "DebugLog.txt";
}
//路径
QString filePath = identify_function_ptr((void*) identify_function_ptr);
QFileInfo fileInfo(filePath);
QString directoryPath = fileInfo.dir().path() + "/" + filename;
QFile fileError(directoryPath);
if(fileError.open(QIODevice::ReadWrite|QIODevice::Text|QIODevice::Append)){
// 将内容写入文件
QTextStream out(&fileError);
out.setCodec("UTF-8");
QDateTime dateTime= QDateTime::currentDateTime();//获取系统当前的时间
QString strTime = dateTime.toString("yyyy-MM-dd hh:mm:ss");//格式化时间
out.seek(0);
out << strTime << ":" << outSt << "\n";
fileError.close();
}
}
这个函数在写的时候有几个坑。
1.注意是代码所在的DLL的路径,不是EXE的运行路径,在CAD二次开发中,DLL的路径和CAD运行程序不在一个路径,DLL是加载上去的。
2.把调试信息写入文件时,要设置字符集为UTF-8,不然中文字符可能写不进去。