计数 Solaris 上的函数调用
Count function calls on Solaris
我目前正在使用 collect
和 analyser
在 Solaris 上分析 C++ 应用程序,但我只能看到每个函数花费的秒数。
如何查看每个函数被调用的次数?
我应该在命令行中添加任何选项来启用计数器吗?还是我应该使用不同的工具?
collect
命令不会那样工作 - 它 采样 运行ning 可执行文件以获取它收集的调用堆栈数据。
您需要compile with -xpg
并在生成的输出数据文件上使用prof
或gprof
。
像这样的 dtrace 脚本也会收集函数调用计数:
countfuncs.d:
pid$target:::entry
{
@[ probefunc ] = count();
}
然后 运行 即:
dtrace -s countfuncs.d -c your_program ...
根据我的经验,计算一个函数被调用的次数并不重要——重要的是 time(CPU 或挂钟)是多少花费在任何重要的功能上。如果一个函数占用了你 90% 的执行时间,那就是你花精力优化性能的地方,无论该函数被调用一次还是数十亿次。如果一个函数占用了0.001%的执行时间,那么无论调用多少次你都不会理会它。
我目前正在使用 collect
和 analyser
在 Solaris 上分析 C++ 应用程序,但我只能看到每个函数花费的秒数。
如何查看每个函数被调用的次数?
我应该在命令行中添加任何选项来启用计数器吗?还是我应该使用不同的工具?
collect
命令不会那样工作 - 它 采样 运行ning 可执行文件以获取它收集的调用堆栈数据。
您需要compile with -xpg
并在生成的输出数据文件上使用prof
或gprof
。
像这样的 dtrace 脚本也会收集函数调用计数:
countfuncs.d:
pid$target:::entry
{
@[ probefunc ] = count();
}
然后 运行 即:
dtrace -s countfuncs.d -c your_program ...
根据我的经验,计算一个函数被调用的次数并不重要——重要的是 time(CPU 或挂钟)是多少花费在任何重要的功能上。如果一个函数占用了你 90% 的执行时间,那就是你花精力优化性能的地方,无论该函数被调用一次还是数十亿次。如果一个函数占用了0.001%的执行时间,那么无论调用多少次你都不会理会它。