微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C ++中缩进轨迹

我想为我们的大型C ++代码库开发缩进的跟踪,这对于开发者来说是非常有帮助的。 我想要缩进跟踪function。 例如考虑下面的代码

void FunctionA() { TR_ENTER("Function A"); TR_PRINT("Dignostic message Function A"); FunctionB(); // Call function B } void FunctionB() { TR_ENTER("Function B"); TR_PRINT("Dignostic message Function B"); FunctionC(); // Call function B } void FunctionC() { TR_ENTER("Function C"); TR_PRINT("Dignostic message Function C"); }

正如你所看到的,上面的调用是嵌套在一起的。 我想要生成跟踪日志,如下所示:

Function A - Start Dignostic message Function A Function B - Start Dignostic message Function B Function C - Start Dignostic message Function C Function C - End Function B - End Function A - End

TR_ENTER和TR_PRINT是我用作示例的一些macros。 要说function启动我使用TR_ENTER和打印一些dignostic消息我已经使用TR_PRINT。

正如你所看到的嵌套函数调用的痕迹是相互缩进的。 我是否知道有什么已经有的东西可以阻止自己重新开始工作。

用Unicode输出Java System.out

在Visual C ++中使用dllimport

subprocess.Popen成功消息

从Windows中的系统时钟获取当前时间(以毫秒为单位)?

通过Python计算进程的cpu使用情况

谢谢,笨蛋

没有支持的颜色terminal库Python / Jupyter

打开Windows C#WPF

如何从控制台读取多行用户input?

x:用空string绑定图像

Python:'pyautogui'没有属性'截图'(Windows)

您需要跟踪通话深度:

class trace_entry; class trace_log { public: trace_log() : depth_(0) { } private: // noncopyable so we don't accidentally copy it trace_log(trace_log&); void operator=(trace_log); friend trace_entry; int depth_; }; class trace_entry { public: trace_entry(trace_log& log,const std::string& frame) : log_(log),frame_(frame) { std::cout << std::string(4 * log.depth_,' ') << "ENTER " << frame_ << std::endl; ++log_.depth_; } ~trace_entry() { --log_.depth_; std::cout << std::string(4 * log_.depth_,' ') << "EXIT " << frame_ << std::endl; } private: // noncopyable so we don't accidentally copy it trace_entry(trace_entry&); void operator=(trace_entry); trace_log& log_; std::string frame_; };

用法示例:

void a(trace_log& log) { trace_entry e(log,"a"); } void b(trace_log& log) { trace_entry e(log,"b"); return a(log); } int main() { trace_log log; trace_entry e(log,"main"); b(log); }

输出

ENTER main ENTER b ENTER a EXIT a EXIT b EXIT main

这很容易扩展,以支持其他形式的日志记录,允许额外的日志消息,以及任何你想做的事情。 ( trace_log实际上是执行日志记录会好得多,但为了说明的目的,这是证明你正在尝试做什么的最简单方法。)

C ++中有很多的日志库,特别是我可以推荐Log4cxx 。 他们将帮助您构建和配置您的应用程序的日志消息输出。 要分析日志文件,你需要一个额外的工具,如Apache Chainsaw 。

请参阅log4j文件是否有日志文件分析器?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐