使用 callgrind 应该可以按预期工作。为了测试这一点,我使用一个简单的库和主函数 Makefile 设置了一个简单的项目:
CFLAGS=-fpic
exe:exe.o lib.so
cc -o exe exe.o lib.so
lib.so:lib.o
cc -shared lib.o -o lib.so
clean:
rm -f exe lib.so *.o
lib.c 是一个包含 2 个函数的简单库:
#include <stdio.h>
void someOtherFunction() { printf("someOtherFunction\n"); }
void someFunction() { printf("someFunction\n"); someOtherFunction(); }
exe.c 是一个非常简单的可执行文件:
int someFunction();
void main() { someFunction(); }
使用 Makefile 构建可执行文件并使用 valgrind 运行它,如下所示:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD valgrind --tool=callgrind ./exe
如果您检查 callgrind 输出,您将在共享库中找到这两个函数的分析数据。如果您看不到这些功能,您可能正在使用不支持此功能的非标准环境。我正在使用带有最新补丁的 Linux Mint 11 x64。