あなたは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
....
プロファイラがこれを伝えます。 –
私はシステムコール以外の多くを見ることはできません。 –
さらに多くの警告でコンパイルする必要があります。あなたの 'close'呼び出しは意味をなさない。 –