我有一些C ++编写的软件包。 Linux,gcc。 我可以修改编译过程(更改Makefile,标志等),但不能更改C ++源代码。
一个用不同的参数运行这个包,它执行一个工作并退出。
如何计数 :
1)具有特定名称的函数的调用次数?
2)具有特定签名的function的调用次数?
3)其中一个参数是特定types的函数的调用次数,例如std :: string(type是由签名指定的)?
4)和额外的STL对象函数的调用次数,即std :: string拷贝构造函数?
(我的意思是在运行期间统计一些呼叫。)
我想用GDB来做,但是我觉得这很难做(1),根本没有find如何做(2) – (4)。
所有可以接受的答案我会写在这里为人类。
你可以尝试在linux下运行DTRACE 。 这绝对是你正在努力完成的一个伟大的工具。
你检查过Valgrind的callgrind吗?
如果你不使用线程(或者愿意尝试一下), gprof在某些情况下是相当容易的。 但是,有一个线程的解决方法 。