2011-02-18 78 views
3

我有一些C++写的包。 Linux,gcc。我可以修改编译过程(更改Makefile,标志等),但可以不是更改C++源代码。按名称或签名计数函数调用。 Gcc,C++

一个用不同的参数运行包,它执行一个工作并退出。

如何到计数
1)具有特定名称的函数的调用次数?
2)具有特定签名的函数的调用次数?
3)其中一个参数是特定类型的函数的调用次数,即std :: string(类型由签名指定)?
4)和extra STL对象函数的调用次数,即std :: string拷贝构造函数?

(我指的是运行过程中计数呼叫的数量。)

我想用GDB做到这一点,但我发现它非常很难做到(1),并没有发现该怎么办(2) - (4)。


所有可以接受的答案我会写在这里为人类。

+2

人类赞赏它! – corsiKa 2011-02-18 02:37:57

回答

4

您可以尝试在linux下运行DTRACE。这绝对是你正在努力完成的伟大工具。

2

你检查了Valgrind的callgrind

如果您不使用线程(或者愿意尝试一下),gprof在某些情况下非常容易。但是,线程有一个workaround