[转]适合OGRE程序的调试技巧:logManager
http://blog.csdn.net/qq18052887/article/details/4837981
OGRE的程序由于大量使用STL,加上我们也喜欢STL.所以在debug模式下,如果程序稍微大一点,要想调试几乎不可能,那速度不是人可以忍受的
所以好用的断点啊,快速监视啊,assert啊,基本不能用.为了速度,只有在release模式下用log打印日志的方式自己输出重要信息.
而要大量使用logManager,就必须要用流的方式来打印数据,可以把字符串和变量连接起来,省去转换变量为字符串的麻烦
至于怎么用流的方式,分2种情况
如果是早期的1.4X版本,可以用StringUtil::StrStreamType:
- // Log informational
- StringUtil::StrStreamType str;
- str << "Material " << mName << " Technique " << techNo;
- if (!(*i)->getName().empty())
- str << "(" << (*i)->getName() << ")";
- str << " is not supported. " << compileMessages;
- LogManager::getSingleton().logMessage(str.str(), LML_TRIVIAL);
如果是1.6X的版本,有更好方法,可以用stream:
- LogManager::getSingleton().stream()
- << "Generating " << lodDistances.size()
- << " lower LODs for mesh " << mName;
log日志有级别,log信息也有级别,如果2个级别相加 >= 4
那么这个信息就会被打印到log文件.默认情况下log日志级别和log信息级别都是2
所以会打印出来,当然也可以手动设置.
- // LogMessageLevel + LoggingLevel > OGRE_LOG_THRESHOLD = message logged
- #define OGRE_LOG_THRESHOLD 4
- /** The level of detail to which the log will go into.
- */
- enum LoggingLevel
- {
- LL_LOW = 1,
- LL_NORMAL = 2,
- LL_BOREME = 3
- };
- /** The importance of a logged message.
- */
- enum LogMessageLevel
- {
- LML_TRIVIAL = 1,
- LML_NORMAL = 2,
- LML_CRITICAL = 3
- };
设置级别的好处就是可以根据需要观看log信息比如调试的时候设置log级别最低,可以看到所有信息,发布的时候设置最高,少打印很多不需要的信息,提高效率:
- void App::createRoot()
- {
- mRoot = new Root();
- //LogManager::getSingleton().getDefaultLog()->setLogDetail(LL_LOW); // log级别设置为最低
- LogManager::getSingleton().getDefaultLog()->setLogDetail(LL_BOREME); // log级别设置为最高
- }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构