您可以使用gnu profiler gprof
與-pg
標誌編譯(main.cc):
gcc -pg main.cc -o main
然後執行它(./main
)。你的二進制文件會產生一個文件(gmon.out
)。然後,你可以通過使用gprof的獲得跟蹤:
gprof main gmon.out
你的榜樣,我得到:
index % time self children called name
0.00 0.00 1/1 __do_global_ctors_aux [9]
[7] 0.0 0.00 0.00 1 global constructors keyed to main [7]
0.00 0.00 1/1 __static_initialization_and_destruction_0(int, int) [8]
-----------------------------------------------
0.00 0.00 1/1 global constructors keyed to main [7]
[8] 0.0 0.00 0.00 1 __static_initialization_and_destruction_0(int, int) [8]
這不是很多信息,因爲您的應用程序並不複雜。
如果要跟蹤系統調用,請嘗試strace ./main
。輸出很長,你會看到所有的系統調用:
execve("", [""], [/* 26 vars */]) = 0
brk(0) = 0x877f000
access("", F_OK) = -1 ENOENT
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7748000
access("", R_OK) = -1 ENOENT
open("", O_RDONLY) = -1 ENOENT
open("", O_RDONLY) = -1 ENOENT
stat64("", 0xbfdc4a18) = -1 ENOENT
open("", O_RDONLY) = -1 ENOENT
stat64("", {st_mode=S_IFDIR|0755, st_size=6104, ...}) = 0
open("", O_RDONLY) = -1 ENOENT
open("", O_RDONLY) = 3
....
分析器會告訴你這一點。 – 2012-03-16 23:37:54
除了系統調用外,我看不到其他東西。 – 2012-03-16 23:39:38
您應該編譯更多的警告。你的「關閉」電話沒有任何意義。 – 2012-03-16 23:42:43