C中的自动进入退出跟踪

时间:2009-03-11 09:10:35

标签: c logging

我是否必须在所有C函数中添加进入和退出日志?

如果,那么是否有任何可能的方法来自动编写函数的进入和退出(类似于在java中使用面向方面编程的自动进入/退出)。

我正在编写的应用程序非常重要,为每个函数添加入口/出口语句可能会延迟性能并使代码不可读。

4 个答案:

答案 0 :(得分:2)

C不支持任何形式的内省或在运行时或虚拟机上通过魔法自动执行操作;没有虚拟机,运行时支持基本上只是提供标准功能的“死”代码库。

正如Subtwo指出的那样,如果你想做某事(比如登录/退出),就必须要做,因此需要时间。你不能只是“隐藏”这种惩罚,只需很少的开销即可。

标准分析器可能会给你一些见解,通过统计抽样程序来查看哪些函数执行,但这不会给你调用顺序,只是程序在采样时执行代码的随机位置。 / p>

你可能会转向一些预处理器技巧,这是一种常见的方法来执行像记录这样的“样板”操作,例如定义一些宏,然后放在每个函数的入口/出口点。但是,您必须记住包含宏,并且当然会出现执行日志记录时的任何性能损失。

答案 1 :(得分:1)

首先。如果你想记录某些内容,无论你如何完成它都需要时间。这是通过方面编程或其他东西。如果你的应用程序是时间关键的,你应该有一些开关来打开/关闭调试。

<强>更新 结帐http://perfinsp.sourceforge.net/hookit_linux.html

答案 2 :(得分:0)

查看AspectC,这是C扩展的一种变体,具有面向方面的功能(就像AspectJ是具有面向方面功能的Java的变体)。

答案 3 :(得分:0)

你可能会从 FUNCTION 和一些宏中获得一些好处。您仍然需要为每个函数添加进入和退出宏。但至少你不需要重新输入功能名称。

如果你对C ++ RAII没问题,那么你在每个函数中只需要一个入口宏。