我有一些c ++编写的包。 Linux,gcc。我可以修改编译过程(更改Makefile,标志等),但不可以更改C ++源代码。
使用不同的参数运行包,它可以完成工作并退出。
如何计数:
1)具有特定名称的功能的呼叫次数?
2)具有特定签名的函数的调用次数?
3)函数的调用次数,其中一个参数是特定类型,即std :: string(类型由签名指定)?
4)和 extra STL对象函数的调用次数,即std :: string copy构造函数?
(我的意思是在跑步期间计算一些电话。)
我想用GDB做这件事,但我发现很难做到(1)并且根本没有找到如何做(2) - (4)。
我将在这里为人类写下所有可接受的答案。
答案 0 :(得分:4)
您可以尝试在linux下运行DTRACE。对于你想要完成的任务来说,这绝对是一个很好的工具。
答案 1 :(得分:2)
你检查了Valgrind的callgrind吗?
如果您没有使用线程(或者愿意尝试一下),gprof在某些情况下非常容易。但是,线程有workaround。