在C ++中记录代码执行
|
经过多次使用gprof和callgrind,我得出了一个(显而易见的)结论:在处理大型程序(如装载整车的CAD程序)时,我不能有效地使用它们。我当时在想,也许我可以使用C / C ++ MACRO魔术,并以某种方式构建一个简单(但不错)的日志记录机制。例如,可以使用以下宏调用一个函数:
#define CALL_FUN(fun_name, ...) \\
fun_name (__VA_ARGS__);
我们可以在函数调用之前和之后添加一些时钟/定时的东西,以便每个用CALL_FUN调用的函数都可以计时,例如
#define CALL_FUN(fun_name, ...) \\
time_t(&t0); \\
fun_name (__VA_ARGS__); \\
time_t(&t1);
变量t0,t1可以在全局日志记录对象中找到。该日志记录对象还可以保存通过CALL_FUN调用的每个函数的调用图。之后,可以将该对象写入(特定格式)文件中,并从其他程序进行解析。
所以这是我的(第一个)问题:您认为这种方法易于处理吗?如果是,则如何增强它;如果不是,则可以提出一种更好的方法来测量时间和记录通话记录吗?
一位同事提出了另一种解决此问题的方法,该方法在每个功能(我们关心要记录的功能)上添加特定注释。然后,在制作过程中,必须运行特殊的预处理器,解析每个源文件,为我们要记录的每个函数添加日志记录逻辑,使用新添加的(解析)代码创建一个新的源文件,然后构建该代码。我想到处阅读CALL_FUN ...宏(我的建议)不是最好的方法,而他的方法可以解决此问题。那么您对这种方法有何看法?
PS:我不熟悉C / C ++ MACRO的陷阱,因此,如果可以使用其他方法进行开发,请这样说。
谢谢。
没有找到相关结果
已邀请:
6 个回复
辟官陡板休
在您的函数中,然后您只需编写
骂狮淋唐便
吠强祷豪硅
祁澈盘哼颗
香腔弥胯瓤
现在,您可以将该方法与您提到的预处理方法集成在一起。只需在要记录的每个函数的开头添加以下内容:
然后在调试版本中自动替换该字符串(应该不难)。
凄嘛姥