óÀ½, ÀÌÀü, ´ÙÀ½, ¸¶Áö¸· ¼½¼Ç, ¸ñÂ÷


gprofÀÇ Ãâ·Â °á°ú Çؼ®

gprof Àº ¿©·¯ °¡Áö ´Ù¸¥ Ãâ·Â ½ºÅ¸ÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̵é Ãâ·Â ½ºÅ¸ÀÏÁß °¡Àå Áß¿äÇÑ °ÍÀ» ¾Æ·¡¿¡¼­ ¼³¸íÇÑ´Ù. °¡Àå ´Ü¼øÇÑ ÇüÅÂÀÇ Ãâ·Â ½ºÅ¸ÀÏ( ÆÄÀÏ Á¤º¸, ½ÇÇà Ƚ¼ö, ÇÔ¼ö ¹× ÆÄÀÏÀÇ ¼ø¼­)¿¡ ´ëÇÑ ¼³¸íÀº ÇÏÁö ¾ÊÁö¸¸, ÇÊ¿äÇÑ °æ¿ì °¢°¢ÀÇ ¿É¼Ç¿¡ ´ëÇÑ ¼³¸í¿¡¼­ ¹®¼­È­ µÇ¾î ÀÖ´Ù. Ãâ·Â°ú °ü·ÃµÈ ¿É¼Ç ¼½¼Ç Âü°í

Flat Profile

Flat profile Àº ÇÁ·Î±×·¥ ³»ÀÇ °¢°¢ÀÇ ÇÔ¼öµéÀ» ½ÇÇàÇϴµ¥ ¼ÒºñÇÑ ÃÑ ½Ã°£À» º¸¿©ÁØ´Ù. `-z' ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ½Ã°£À» ÀüÇô ¼ÒºñÇÏÁö ¾Ê¾Ò°Å³ª, È£ÃâÀÌ ÀüÇô ¾ø¾ú´ø ÇÔ¼öµéÀº °á°ú Ãâ·Â¿¡¼­ Á¦¿ÜµÈ´Ù. ÇÁ·ÎÆÄÀϸµ ¿É¼ÇÀ¸·Î ÄÄÆÄÀÏ µÇÁö ¾ÊÀº ¸ðµâ¿¡ ÀÖ´Â ÇÔ¼ö ¶Ç´Â ÇÁ·Î±×·¥ Ä«¿îÅÍ È÷½ºÆ®·Î±×·¥¿¡ Ç¥½ÃµÉ ¼ö ÀÖ´Â ½Ã°£º¸´Ù ÀûÀº ½Ã°£µ¿¾È ½ÇÇàµÈ ÇÔ¼öÀÌ Æ÷ÇԵǾî ÀÖ´Ù¸é ÀüÇô È£ÃâÀÌ ¾ø¾ú´ø ÇÔ¼öµé°ú ±¸ºÐÀ» ÇÒ ¼ö ¾ø´Ù´Â Á¡¿¡ À¯ÀÇÇÏ¿©¾ß ÇÑ´Ù.

¾Æ·¡ÀÇ ¿¹´Â flat profileÀÇ ÀϺθ¦ º¸¿©ÁÖ°í ÀÖ´Ù.

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 33.34      0.02     0.02     7208     0.00     0.00  open
 16.67      0.03     0.01      244     0.04     0.12  offtime
 16.67      0.04     0.01        8     1.25     1.25  memccpy
 16.67      0.05     0.01        7     1.43     1.43  write
 16.67      0.06     0.01                             mcount
  0.00      0.06     0.00      236     0.00     0.00  tzset
  0.00      0.06     0.00      192     0.00     0.00  tolower
  0.00      0.06     0.00       47     0.00     0.00  strlen
  0.00      0.06     0.00       45     0.00     0.00  strchr
  0.00      0.06     0.00        1     0.00    50.00  main
  0.00      0.06     0.00        1     0.00     0.00  memcpy
  0.00      0.06     0.00        1     0.00    10.11  print
  0.00      0.06     0.00        1     0.00     0.00  profil
  0.00      0.06     0.00        1     0.00    50.00  report
...

Ãâ·Â °á°ú¿¡¼­ ÇÔ¼ö´Â ¼ÒºñÇÑ ½ÇÇà ½Ã°£ÀÇ ³»¸² Â÷¼øÀ¸·Î ¸ÕÀú Á¤·ÄµÈ ÈÄ, È£ÃâµÈ Ƚ¼öÀÇ ³»¸² Â÷¼øÀ¸·Î µÇ°í, ´Ù½Ã ÇÔ¼ö¸í¿¡ µû¶ó Á¤·ÄµÈ´Ù. `mcount' ÇÔ¼ö¿Í `profil' ÇÔ¼ö´Â ÇÁ·ÎÆÄÀϸµÀ» À§ÇÑ ³»ºÎ ÇÔ¼ö·Î ¸ðµç flat profile¿¡ Æ÷ÇԵȴÙ. `mcount' ÇÔ¼ö¿Í `profil' ÇÔ¼ö¿¡ ¼Ò¿äµÈ ½Ã°£À» »ìÆ캽À¸·Î½á ÇÁ·ÎÆÄÀϸµ¿¡ µû¸¥ ¿À¹öÇìµå¸¦ ÃøÁ¤ÇÒ ¼ö ÀÖ´Ù.

Ä÷³ À̸§(column headers) ÀÌÀüÀÇ ¶óÀÎÀº °¢°¢ÀÇ »ùÇøµ °£°Ý Ç¥½ÃÇÏ´Â ÇàÀÌ ÀÖ´Ù. ÀÌ sampling period ¸¦ »ç¿ëÇÏ¿© ½Ã°£À» ³ªÅ¸³»´Â °¢°¢ÀÇ ¼öÄ¡ÀÇ ¿ÀÂ÷ÀÇ ÇѰ踦 ÃßÁ¤ÇÒ ¼ö ÀÖ´Ù. ½Ã°£À» ³ªÅ¸³»´Â ¼öÄ¡°¡ sampling period º¸´Ù Å©Áö ¾ÊÀº °æ¿ì ÀÌ ¼öÄ¡´Â ½Å·ÚÇÒ ¾ø´Â °ªÀÌ´Ù. À§ÀÇ ¿¹¿¡¼­ °¢°¢ÀÇ »ùÇÃÀº 0.01ÃÊ·Î Ä«¿îÆ®µÇ¾î ÀÖ´Ù. ÀÌ´Â 100HzÀÇ sampling rate¸¦ ³ªÅ¸³½´Ù. ÇÁ·Î±×·¥ÀÇ ÃÑ ½ÇÇà ½Ã°£Àº `cumulative seconds' Çʵ忡¼­ ¾Ë ¼ö ÀÖµíÀÌ 0.06ÃÊÀÌ´Ù. °¢°¢ÀÇ »ùÇÃÀÌ 0.01ÃÊ °£°ÝÀ¸·Î ¼öÁýµÇ¾úÀ¸¹Ç·Î, ÀÌ ÇÁ·Î±×·¥ÀÇ ½ÇÇàÁß¿¡ ¿©¼¸ ¹øÀÇ »ùÇøµÀÌ ÀÖ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù. `self seconds' ÇʵåÀÇ °ªÀ¸·ÎºÎÅÍ ¿©¼¸ ¹øÀÇ »ùÇøµ Áß µÎ °³´Â ÇÁ·Î±×·¥ÀÌ `open' ÇÔ¼ö³»¿¡ ÀÖÀ» ¶§ ÀϾÀ½À» ¾Ë ¼ö ÀÖ´Ù. ´Ù¸¥ ³× ¹øÀÇ »ùÇøµÀº °¢°¢ `offtime', `memccpy', `write', ¿Í `mcount' ÇÔ¼ö¿¡¼­ Çѹø¾¿ ¹ß»ýÇÏ¿´´Ù. »ùÇøµÀÌ ¿©¼¸ ¹ø¹Û¿¡ ¹ß»ýÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î, ÀÌµé °ªÁß ¾î´À °Íµµ ½Å·ÚÇÒ ¸¸ÇÑ °ÍÀ¸·Î º¸±â´Â ¾î·Æ´Ù. Áï µ¿ÀÏÇÑ ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇÏ´Â °æ¿ì `mcount' ÇÔ¼öÀÇ `self seconds' ´Â 0.00' ¶Ç´Â `0.02'ÀÌ µÉ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇÑ Á»´õ »ó¼¼ÇÑ ³»¿ëÀº Åë°èÀû »ùÇøµ¿¡ µû¸¥ ¿À·ù ¼½¼ÇÀ» Âü°íÇϱ⠹ٶõ´Ù.

`self seconds' ÇÊµå °ªÀÌ `0.00'ÀÎ ÇÔ¼öµéÀº È÷½ºÅä±×·¥ »ùÇÿ¡¼­´Â Ç¥½ÃµÇÁö ¾Ê´Â´Ù. ±×·¯³ª call graph »ó¿¡¼­ À̵é ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀÌ ÀÖ¾ú´ø °ÍÀ¸·Î ³ªÅ¸³­´Ù¸é ¸®½ºÆõǾî¾ß ÇϹǷÎ, È£Ãâ Ƚ¼ö¸¦ ³ªÅ¸³»´Â `calls' ÇʵåÀÇ ³»¸²Â÷¼øÀ¸·Î Ç¥½ÃµÈ´Ù. À̵é ÇÔ¼ö°¡ ½ÇÇàµÇ´Âµ¥ ½Ã°£ÀÌ ¼ÒºñµÇ±â´Â ÇßÁö¸¸, È÷½ºÅä±×·¥ »ùÇÃÀÇ ¾çÀÌ Àû±â ¶§¹®¿¡ °¢°¢ÀÇ ÇÔ¼ö¿¡¼­ ¾ó¸¶¸¸Å­ÀÇ ½Ã°£ÀÌ ¼ÒºñµÇ¾ú´Â Áö¸¦ ÆÇ´ÜÇÒ ¼ö°¡ ¾ø´Ù.

°¢ ¶óÀο¡ ÀÖ´Â ÇʵåµéÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù.

% time
ÇÁ·Î±×·¥ Àüü ½ÇÇà ½Ã°£¿¡ ´ëÇÑ ÇØ´ç ÇÔ¼öÀÇ ½ÇÇà½Ã°£ÀÇ ¹éºÐÀ²°ªÀ¸·Î À̵éÀ» ÀüºÎ ´õÇÏ¿© 100%°¡ µÇ¾î¾ß ÇÑ´Ù.
cumulative seconds
ÇØ´ç ÇÔ¼ö¸¦ ½ÇÇàÇϴµ¥ ÄÄÇ»ÅÍ°¡ ¼ÒºñÇÑ ½Ã°£¿¡ Å×À̺í»ó¿¡¼­ À§¿¡ ÀÖ´Â ÇÔ¼öµé¿¡¼­ ¼ÒºñµÈ ½Ã°£À» ´õÇÑ ´©Àû°ªÀÌ´Ù. ¿©±â¼­ ½Ã°£ ´ÜÀ§´Â ÃÊÀÌ´Ù.
self seconds
¼ø¼öÇÏ°Ô ÇØ´ç ÇÔ¼ö¿¡¼­¸¸ ¼Ò¿äµÈ ½Ã°£À» ³ªÅ¸³½´Ù. flat profile ¸®½ºÆÃÀº ÀÌ °ªÀ» ±âÁØÀ¸·Î ¸ÕÀú Á¤·ÄµÈ´Ù.
calls
ÇØ´ç ÇÔ¼ö°¡ È£ÃâµÈ ÃÑ È½¼ö¸¦ ³ªÅ¸³½´Ù. ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀÌ Çѹøµµ ¾ø¾ú°Å³ª, È£ÃâµÈ Ƚ¼ö¸¦ ¾Ë ¼ö ¾ø´Â °æ¿ì( ÇØ´ç ÇÔ¼ö°¡ Æ÷ÇԵǾî ÀÖ´Â ¸ðµâÀÌ ÇÁ·ÎÆÄÀϸµ ¿É¼ÇÀ» ¼³Á¤ÇÏ¿© ÄÄÆÄÀϵÇÁö ¾ÊÀº °æ¿ì), calls Çʵå´Â °ø¶õÀÌ µÈ´Ù.
self ms/call
ÇØ´ç ÇÔ¼ö°¡ ÇÁ·ÎÆÄÀϸµµÈ °æ¿ì, ÇØ´çÇÔ¼öÀÇ 1ȸ È£Ãâ´ç Æò±Õ ¼Òºñ ½Ã°£À» milliseconds´ÜÀ§·Î ³ªÅ¸³½ °ªÀÌ´Ù. ÇØ´ç ÇÔ¼ö°¡ ÇÁ·ÎÆÄÀϸµµÇÁö ¾Ê¾Ò´Ù¸é ÀÌ Çʵå´Â °ø¶õÀÌ µÈ´Ù.
total ms/call
ÇØ´ç ÇÔ¼ö°¡ ÇÁ·ÎÆÄÀϸµµÈ °æ¿ì, ÇØ´çÇÔ¼öÀÇ È£Ãâ¿¡ ¼ÒºñµÈ Æò±Õ ½Ã°£À» ÇÔ¼ö³»¿¡¼­ ´Ù¸¥ ÇÔ¼ö È£ÃâÀÌ ÀÖ´Â °æ¿ìÀÇ ½Ã°£±îÁöµµ °í·ÁÇÏ¿© °è»êÇÑ °ªÀÌ´Ù. ÇØ´ç ÇÔ¼ö°¡ ÇÁ·ÎÆÄÀϸµµÇÁö ¾Ê¾Ò´Ù¸é, ÀÌ Çʵå´Â °ø¶õÀÌ µÈ´Ù. ÀÌ Çʵå´Â call graph ºÐ¼®À» »ç¿ëÇÏ´Â À¯ÀÏÇÑ ÇʵåÀÌ´Ù.
name
ÇØ´ç ÇÔ¼öÀÇ À̸§À¸·Î, flat profile¿¡¼­´Â ÀÌ ÇʵåÀÇ °ªÀ» »ç¿ëÇÏ¿© Á¦ÀÏ ¸¶Áö¸·¿¡ Á¤·ÄÇÑ´Ù.

Call Graph

Call graph ´Â °¢°¢ÀÇ ÇÔ¼ö¿Í ±× ÇÔ¼öÀÇ ÀÚ½Ä ÇÔ¼ö(children)¿¡¼­ ¼ÒºñµÈ ½Ã°£ÀÇ ¾çÀ» º¸¿©ÁØ´Ù. call graphÀÇ Á¤º¸¸¦ ÀÌ¿ëÇϸé ÇÔ¼ö ÀÚü¿¡¼­ ¸¹Àº ½Ã°£À» ¼ÒºñÇÏÁö´Â ¾ÊÁö¸¸, ÇÔ¼ö ³»ºÎ¿¡ ½Ã°£ ¼Òºñ·®ÀÌ ¸¹Àº ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â ÇÔ¼öµéÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù.

´ÙÀ½¿¡ ¿¹½ÃÇÏ´Â call ÀÇ ¿¹´Â ¾ÕÀåÀÇ flat profileÀÇ ¿¹Á¦¿¡¼­ »ç¿ëÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇÑ gprof ½ÇÇàÀ¸·ÎºÎÅÍ ¾òÀº call graph¿¡¼­ ¹ßÃéÇÑ °ÍÀÌ´Ù.

granularity: each sample hit covers 2 byte(s) for 20.00% of 0.05 seconds

index % time    self  children    called     name
                                                 <spontaneous>
[1]    100.0    0.00    0.05                 start [1]
                0.00    0.05       1/1           main [2]
                0.00    0.00       1/2           on_exit [28]
                0.00    0.00       1/1           exit [59]
-----------------------------------------------
                0.00    0.05       1/1           start [1]
[2]    100.0    0.00    0.05       1         main [2]
                0.00    0.05       1/1           report [3]
-----------------------------------------------
                0.00    0.05       1/1           main [2]
[3]    100.0    0.00    0.05       1         report [3]
                0.00    0.03       8/8           timelocal [6]
                0.00    0.01       1/1           print [9]
                0.00    0.01       9/9           fgets [12]
                0.00    0.00      12/34          strncmp <cycle 1> [40]
                0.00    0.00       8/8           lookup [20]
                0.00    0.00       1/1           fopen [21]
                0.00    0.00       8/8           chewtime [24]
                0.00    0.00       8/16          skipspace [44]
-----------------------------------------------
[4]     59.8    0.01        0.02       8+472     <cycle 2 as a whole>	[4]
                0.01        0.02     244+260         offtime <cycle 2> [7]
                0.00        0.00     236+1           tzset <cycle 2> [26]
-----------------------------------------------

Á¡¼±À¸·Î Ç¥½ÃµÈ ¶óÀÎÀº Å×À̺íÀ» ¿£Æ®¸®(entry)º°·Î ±¸ºÐÇϱâ À§ÇÑ °ÍÀÌ´Ù. °¢°¢ÀÇ ÇÔ¼ö¿¡ ÇϳªÀÇ ¿£Æ®¸®°¡ ´ëÀÀÇϸç, °¢°¢ÀÇ ¿£Æ®¸®¿¡´Â Çϳª ÀÌ»óÀÇ ¶óÀεéÀÌ ÀÖ´Ù.

°¢°¢ÀÇ ¿£Æ®¸®¿¡¼­ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ(primary line)Àº '['¿Í ']'·Î µÑ·¯½ÎÀÎ À妽º ¹øÈ£·Î ½ÃÀÛÇÑ´Ù. ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ ¸¶Áö¸· ¿­¿¡´Â ÇØ´ç ¿£Æ®¸®°¡ ¾î¶² ÇÔ¼ö¿¡ ´ëÇÑ °ÍÀÎÁö¸¦ ³ªÅ¸³½´Ù.  ÇÑ °³ÀÇ ¿£Æ®¸®¾È¿¡¼­ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ ¾Õ¿¡ ÀÖ´Â ¶óÀÎÀº ÇÁ¶óÀ̸Ӹ® ¶óÀο¡¼­ ³ªÅ¸³»´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÔ¼ö(callers)µéÀ» ³ªÅ¸³ª¸ç, ÇÁ¶óÀ̸Ӹ® ¶óÀÎ µÚ¿¡ ÀÖ´Â ¶óÀÎÀº ÇÁ¶óÀ̸Ӹ® ¶óÀο¡¼­ ³ªÅ¸³»´Â ÇÔ¼öÀÇ ¼­ºê·çƾ( call graph¿¡¼­´Â ÀÚ½Ä ÇÔ¼ö- children -À¸·Îµµ ÁöĪÇÑ´Ù)µéÀ» ³ªÅ¸³½´Ù. ¼­ºê·çƾ(subroutine)Àº ¿©±â¼­ ÇØ´ç ÇÔ¼öÀÇ ³»ºÎ¿¡¼­ È£ÃâµÇ´Â ÇÔ¼ö(callee)¸¦ ÁöĪÇÑ´Ù.

¿£Æ®¸®µéÀº ÇØ´ç ÇÔ¼ö¿Í ÇØ´ç ÇÔ¼öÀÇ ¼­ºê·çƾ¿¡¼­ ¼ÒºñµÈ ½Ã°£À¸·Î Á¤·ÄµÈ´Ù.

ÇÁ·ÎÆÄÀϸµÀ» À§ÇÑ ³»ºÎ ÇÔ¼ö mcount (Flat Profile ¼½¼Ç ÂüÁ¶)´Â call graph¿¡¼­ °í·ÁÇÏÁö ¾Ê´Â´Ù.

ÇÁ¶óÀ̸Ӹ® ¶óÀÎ (primary line)

ÇϳªÀÇ call graph ¿£Æ®¸®³»¿¡ ÀÖ´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎ(primary line )Àº ÇöÀç ¿£Æ®¸®°¡ ³ªÅ¸³»´Â ÇÔ¼ö°¡ ¾î¶² ÇÔ¼öÀÎÁö¸¦ ¼³¸íÇÏ°í ÇØ´ç ÇÔ¼ö¿¡ ´ëÇÑ ¸ðµç Åë°èÁ¤º¸¸¦ Á¦½ÃÇÑ´Ù.

¾Æ·¡ÀÇ ¿¹´Â ´ÙÀ½ÀÇ ¼³¸í¿¡¼­ ÂüÁ¶Çϱâ ÁÁµµ·Ï ÇʵåÀÇ À̸§À» ³ªÅ¸³»´Â Çìµù ¶óÀÎ, report ÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®¿¡ ÀÖ´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀ» ÇÔ²² ³ªÅ¸³½°ÍÀÌ´Ù.

index  % time    self  children called     name            ; Çìµù ¶óÀÎ   ...
[3]    100.0    0.00    0.05       1         report [3]    ; ÇÁ¶óÀ̸Ӹ® ¶óÀÎ

ÇÁ¶óÀ̸Ӹ® ¶óÀο¡ ÀÖ´Â ÇʵåµéÀÌ °¡Áö´Â Àǹ̴ ´ÙÀ½°ú °°´Ù.

index
¿£Æ®¸®µéÀº ¿¬¼ÓµÈ Á¤¼ö·Î ¹øÈ£°¡ ºÎ¿©µÈ´Ù. µû¶ó¼­ °¢°¢ÀÇ ÇÔ¼ö´Â ÇÑ °³ÀÇ À妽º ¹øÈ£¸¦ °¡Áö¸ç, ÇØ´ç ÇÔ¼ö°¡ ¼ÓÇÏ´Â ¿£Æ®¸®ÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ ½ÃÀÛÀ§Ä¡¿¡ À妽º ¹øÈ£¸¦ »ç¿ëÇÑ´Ù. ÇÔ¼ö°¡ caller¶Ç´Â ´Ù¸¥ ÇÔ¼öÀÇ ¼­ºê·çƾ(callee)ÀÌ µÉ ¶§ ÀÌ¿¡ ´ëÇÑ ±³Â÷ ÂüÁ¶(cross-reference)¿¡¼­ ÇÔ¼öÀÇ À̸§»Ó¸¸ ¾Æ´Ï¶ó À妽º ¹øÈ£°¡ »ç¿ëµÈ´Ù. À妽º ¹øÈ£´Â ƯÁ¤ ÇÔ¼ö¸¦ ³ªÅ¸³»´Â ¿£Æ®¸®¸¦ ã°íÀÚ ÇÒ ¶§ ±æÀâÀÌ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
% time
ÇØ´çÇÔ¼ö¿Í ÇØ´ç ÇÔ¼öÀÇ ¼­ºê·çƾ¿¡¼­ ¼ÒºñµÈ ½Ã°£ÀÇ ÃÑ·®ÀÇ ¹éºÐÀ²À» ³ªÅ¸³½´Ù. ÇØ´ç ÇÔ¼ö¿¡¼­ ¼ÒºñµÈ ½Ã°£Àº ´Ù½Ã ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼ö(caller)¿¡¼­ ´Ù½Ã »ç¿ëµÈ´Ù. µû¶ó¼­ ÀÌ ¹éºÐÀ²°ªÀ» ´õÇÏ´Â °ÍÀº Àǹ̰¡ ¾ø´Ù.
self
ÇØ´ç ÇÔ¼ö¿¡¼­ ¼ÒºñµÈ ½Ã°£ÀÇ ÃÑ·®À» ³ªÅ¸³½´Ù. ÀÌ °ªÀº flat profile¿¡ ÀÖ´Â ÀÌ ÇÔ¼ö¿¡ ´ëÇÑ seconds Çʵ忡 ÀÖ´Â °ª°ú °°¾Æ¾ß ÇÑ´Ù.
children
ÇØ´çÇÔ¼ö¿¡¼­ È£ÃâÇÑ ¼­ºê·çƾ¿¡¼­ ¼ÒºñÇÑ ½Ã°£ÀÇ ÃÑ·®À» ³ªÅ¸³½´Ù. ÀÌ °ªÀº ÇØ´ç ÇÔ¼ö°¡ ¼ÓÇÑ ¿£Æ®¸®ÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀξƷ¡¿¡ ±â¼úµÈ ÀÚ½ÄÇÔ¼öµéÀÇ self Çʵ尪°ú childrenÇʵ尪µéÀ» ÀüºÎ ´õÇÑ °ª°ú ÀÏÄ¡ÇÏ¿©¾ß ÇÑ´Ù.
called
ÇØ´ç ÇÔ¼ö°¡ È£ÃâµÈ Ƚ¼ö¸¦ ³ªÅ¸³½´Ù. ÇÔ¼ö°¡ Àç±ÍÀûÀ¸·Î È£ÃâµÈ(recursively called) °æ¿ì, `+'¹®ÀÚ·Î ±¸ºÐµÇ´Â µÎ °³ÀÇ È£Ãâ Ƚ¼ö°ªÀ» °¡Áø´Ù. ù ¹ø° ¼öÄ¡´Â ºñÀç±ÍÀû È£ÃâÀÇ È½¼ö¸¦ ³ªÅ¸³»°í, µÎ ¹ø° ¼öÄ¡´Â Àç±ÍÀû È£ÃâÀÇ È½¼ö¸¦ ³ªÅ¸³½´Ù. À§ÀÇ ¿¹¿¡¼­ report ÇÔ¼ö´Â main¿¡¼­ 1ȸ È£ÃâµÇ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù.
name
ÇöÀç ÇÔ¼öÀÇ À̸§À» ³ªÅ¸³½´Ù. ÇÔ¼öÀ̸§µÚ¿¡ À妽º ¹øÈ£°¡ Ç¥½ÃµÈ´Ù. ÇÔ¼ö°¡ Àç±Í È£ÃâÀÇ ½ÎÀÌŬÀÇ ÀϺκÐÀÎ °æ¿ì, ½ÎÀÌŬ ¹øÈ£°¡ ÇÔ¼ö À̸§°ú À妽º ¹øÈ£»çÀÌ¿¡ Ãâ·ÂµÈ´Ù(»óÈ£ Àç±ÍÀûÀ¸·Î È£ÃâµÇ´Â ÇÔ¼öµé¿¡ ´ëÇÑ ¼³¸í ¼½¼Ç ÂüÁ¶). ¿¹¸¦ µé¾î, ÇÔ¼ö gnurr ½ÎÀÌŬ ¹øÈ£ 1ÀÇ ÀϺκÐÀÌ°í À妽º ¹øÈ£°¡ 12¶ó¸é ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ name Çʵå´Â ´ÙÀ½°ú °°ÀÌ Ãâ·ÂµÈ´Ù.
gnurr <cycle 1> [12]

ÇØ´ç ÇÔ¼ö¸¦ È£ÃâÇÏ°í ÀÖ´Â ÇÔ¼öµéÀ» ³ªÅ¸³»´Â ¶óÀÎ(Lines for a Function's Callers)

ÇϳªÀÇ ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¿¡´Â ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼ö¸¦ °¢°¢ ³ªÅ¸³»´Â ¶óÀÎ(caller-line)µéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ÀÌµé ¶óÀÎÀÇ Çʵå´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ Çʵå¿Í ÀÏÄ¡ÇÏÁö¸¸ ÇʵåÀÇ Àǹ̴ ÇÁ¶óÀ̸Ӹ® ¶óÀο¡¼­ÀÇ ÇʵåÀÇ Àǹ̿ʹ ´Ù¸£´Ù.

¾Æ·¡ÀÇ ¿¹´Â ´ÙÀ½ÀÇ ¼³¸í¿¡¼­ÀÇ ÂüÁ¶¸¦ ÆíÇÏ°Ô Çϵµ·Ï ÇʵåÀ̸§À» ³ªÅ¸³»´Â Çìµù ¶óÀÎ, reportÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼öµé¿¡ ´ëÇÑ ·¹ÄÚµåÀÎ caller-line, °ú reportÇÔ¼ö¿¡ ´ëÇÑ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀ» ÇÔ²² ³ªÅ¸³½ °ÍÀÌ´Ù.

index  % time    self  children called     name                    ; Çìµù¶óÀÎ
... 0.00 0.05 1/1 main [2] ; caller line
[3] 100.0 0.00 0.05 1 report [3] ; ÇÁ¶óÀ̸Ӹ® ¶óÀÎ

mainÇÔ¼ö¿¡¼­ È£ÃâµÈ report ÇÔ¼öÀÇ caller-line¿¡¼­ÀÇ °¢ ÇʵåÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù.

self
mainÇÔ¼ö¿¡¼­ È£ÃâµÇ¾úÀ» ¶§ report ÇÔ¼öÀÚ½ÅÀÌ ¼ÒºñÇÑ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡
children
mainÇÔ¼ö¿¡¼­ È£ÃâµÇ¾úÀ» ¶§ report ÇÔ¼öÀÇ ¼­ºê·çƾ¿¡¼­ ¼ÒºñÇÑ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡. self Çʵå¿Í children ÇʵåÀÇ °ªÀº ÇÕÀº mainÇÔ¼ö¿¡¼­ report ÇÔ¼ö¸¦ È£Ã⵿¾È¿¡ ¼ÒºñµÈ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡°¡ µÈ´Ù.
called
È£Ãâ Ƚ¼ö¸¦ ³ªÅ¸³½´Ù. '/'ÀÇ ±¸ºÐµÇ´Â µÎ °³ÀÇ ¼öÄ¡°ªÀÌ ÀÖÀ¸¸ç, ù ¹ø° ¼öÄ¡´Â main ÇÔ¼ö¿¡¼­ report ÇÔ¼ö¸¦ È£ÃâÇÑ È½¼ö¸¦ ³ªÅ¸³»°í µÎ ¹ø° ¼öÄ¡´Â report ÇÔ¼öÀÇ ¸ðµç caller¿¡¼­ report ÇÔ¼ö¸¦ ºñÀç±ÍÀûÀ¸·Î È£ÃâÇÑ È½¼öÀÇ ÃÑÇÕÀ» ³ªÅ¸³½´Ù.
name and index number
report ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼ö(caller)ÀÇ À̸§À» ³ªÅ¸³½´Ù. caller ÇÔ¼öÀÇ À妽º°¡ ÇÔ¼ö¸íµÚ¿¡ Ãß°¡µÈ´Ù. ¸ðµç ÇÔ¼öµéÀÌ call graph¿¡ ³ªÅ¸³ª´Â °ÍÀº ¾Æ´Ï´Ù. Áï, gprof ¸í·ÉÀÇ ¿É¼Ç ÁöÁ¤¿¡ µû¶ó ƯÁ¤ ÇÔ¼ö´Â call graph¿¡ ³ªÅ¸³ªÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. caller ÇÔ¼öÀÇ ¿£Æ®¸®°¡ ¾ø´Â °æ¿ì¿¡µµ callerÇÔ¼ö°¡ È£ÃâÇÑ ÇÔ¼ö(callee)ÀÇ ¿£Æ®¸®¿¡ caller linesÀÌ ÀÖÀ» ¼öµµ ÀÖ´Ù. callerÇÔ¼ö°¡ Àç±Í ½ÎÀÌŬÀÇ ÀϺκÐÀÏ °æ¿ì¿¡´Â ½ÎÀÌŬ ¹øÈ£°¡ callerÇÔ¼ö À̸§°ú À妽º ¹øÈ£»çÀÌ¿¡ Ãâ·ÂµÈ´Ù.

ÇØ´çÇÔ¼öÀÇ caller ÇÔ¼ö¸¦ È®ÀÎÇÒ ¼ö ¾ø´Â °æ¿ì¿¡, dummy caller lineÀÌ Ãâ·ÂµÇ°í dummy caller-line¿¡¼­ callerÇÔ¼öÀÇ À̸§À» ³ªÅ¸³»´Â nameÇʵå´Â `<spontaneous>'·Î Ç¥½ÃµÇ°í ³ª¸ÓÁö Çʵå´Â °ø¶õÀ¸·Î ä¿öÁø´Ù. caller ÇÔ¼ö°¡ ½Ã±×³Î Çڵ鷯 ÇÔ¼öÀÎ °æ¿ì¿¡ dummy caller-line °¡ µÈ´Ù.

ÇØ´ç ÇÔ¼ö ³»ºÎ¿¡¼­ È£ÃâÇÏ´Â ÇÔ¼öµéÀ» ³ªÅ¸³»´Â ¶óÀÎ(Lines for a Function's Subroutines)

ÇϳªÀÇ ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¿¡´Â ÀÌ ÇÔ¼öÀÇ ³»ºÎ¿¡¼­ È£ÃâÇÑ ÇÔ¼öµé(subrountin¶Ç´Â callee)À» °¢°¢ ³ªÅ¸³»´Â ¶óÀÎ(subroutine-line)µéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. callee-lineÀÇ Çʵå´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ Çʵå¿Í µ¿ÀÏÇÏÁö¸¸, ÇʵåÀÇ Àǹ̴ ´Þ¶óÁø´Ù.

¾Æ·¡ÀÇ ¿¹´Â ´ÙÀ½ÀÇ ¼³¸í¿¡¼­ÀÇ ÂüÁ¶¸¦ ÆíÇÏ°Ô Çϵµ·Ï ÇʵåÀ̸§À» ³ªÅ¸³»´Â Çìµù ¶óÀÎ, mainÇÔ¼ö¿¡ ´ëÇÑ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ, main ÇÔ¼ö³»ºÎ¿¡¼­ È£ÃâÇÑ ÇÔ¼öµé¿¡ ´ëÇÑ ·¹ÄÚµåÀÎ callee-lineÀ» ÇÔ²² ³ªÅ¸³½ °ÍÀÌ´Ù.

index  % time    self  children called     name                  ; Çìµù ¶óÀÎ
...
[2]    100.0    0.00    0.05       1         main [2]            ; mainÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®ÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ
0.00 0.05 1/1 report [3] ; main ÇÔ¼ö¿¡¼­ È£ÃâÇÑ ÇÔ¼ö¿¡ ´ëÇÑ subroutine-line

report ÇÔ¼ö¸¦ È£ÃâÇÏ´Â main ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¿¡¼­ÀÇ subroutine-line¿¡¼­ÀÇ °¢°¢ÀÇ Çʵå´Â ´ÙÀ½°ú °°Àº Àǹ̸¦ °¡Áø´Ù.

self
mainÇÔ¼ö¿¡¼­ È£ÃâµÈ report ÇÔ¼ö ³»ºÎ¿¡¼­¸¸ Á÷Á¢ÀûÀ¸·Î ¼ÒºñµÈ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡¸¦ ³ªÅ¸³½´Ù.
children
mainÇÔ¼ö¿¡¼­ È£ÃâµÈ report ÇÔ¼öÀÇ ¼­ºê·çƾ¿¡¼­ ¼ÒºñµÈ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡¸¦ ³ªÅ¸³½´Ù. self Çʵå¿Í children Çʵ忡 ÀÖ´Â °ªÀ» ´õÇÑ °ªÀº mainÇÔ¼ö¿¡¼­ È£ÃâµÈ report ÇÔ¼ö¿¡¼­ ¼ÒºñµÈ ½Ã°£ÀÇ ÃÑ·®¿¡ ´ëÇÑ ÃßÁ¤Ä¡ÀÌ´Ù.
called
calledÇʵå´Â '/'·Î ±¸ºÐµÇ´Â µÎ °³ÀÇ °ªÀ» °¡Áø´Ù. ù ¹ø° °ªÀº main ÇÔ¼ö¿¡¼­ report ÇÔ¼ö¸¦ È£ÃâÇÑ È½¼ö¸¦ ³ªÅ¸³»°í, µÎ ¹ø° °ªÀº report ÇÔ¼ö¿¡ ´ëÇÑ ºñÀç±ÍÀû È£ÃâÀÇ ÃÑ È½¼ö¸¦ ³ªÅ¸³½´Ù. ÀÌ µÎ °ªÀÇ ºñÀ²·ÎºÎÅÍ mainÇÔ¼ö¿¡ ±âÀÎÇÑ reportÇÔ¼öÀÇ self Çʵå¿Í children Çʵ忡 ÀÖ´Â ½Ã°£ÀÇ ¾çÀ» ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº children ¿¡¼­ ¼ÒºñµÈ ½Ã°£·®ÀÇ ÃßÁ¤ ¼½¼ÇÀ» Âü°íÇϱ⠹ٶõ´Ù.
 
name
main ÇÔ¼öÀÇ ¼­ºê·çƾÀÇ À̸§°ú ¼­ºê·çƾÀÇ À妽º ¹øÈ£¸¦ ³ªÅ¸³½´Ù. caller ÇÔ¼ö°¡ Àç±Í ½ÎÀÌŬÀÇ ÀϺκÐÀÏ °æ¿ì, ½ÎÀÌŬ ¹øÈ£°¡ ¼­ºê·çƾ À̸§°ú À妽º ¹øÈ£ »çÀÌ¿¡ Ãâ·ÂµÈ´Ù.
 

»óÈ£ Àç±ÍÀûÀ¸·Î È£ÃâµÇ´Â ÇÔ¼öµé¿¡ ´ëÇÑ ¼³¸í(How Mutually Recursive Functions Are Described)

Call graph¿¡ Àç±Í È£ÃâÀÇ ½ÎÀÌŬ(cycles of recursion)ÀÌ Á¸ÀçÇÏ´Â °æ¿ì graph°¡ º¹ÀâÇØÁú ¼öµµ ÀÖ´Ù. ½ÎÀÌŬÀº ÇÔ¼ö a °¡ ÇÔ¼ö b ¸¦ È£ÃâÇÏ°í, ÇÔ¼ö b°¡ Á÷/°£Á¢ÀûÀ¸·Î ´Ù½Ã ¿ø·¡ÀÇ ÇÔ¼ö a¸¦ È£ÃâÇÏ´Â »óȲ¿¡¼­ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.

µÎ °³ÀÇ ÇÔ¼ö°£¿¡ ¾ç¹æÇâÀ¸·Î call path°¡ ÀÖÀ¸¸é À̵é ÇÔ¼öµéÀº µ¿ÀÏ ½ÎÀÌŬ¿¡ ¼ÓÇÏ°Ô µÈ´Ù. ÇÔ¼ö a ¿Í ÇÔ¼ö b °¡ ¼­·Î°¡ ¼­·Î¸¦ È£ÃâÇÏ°í, ÇÔ¼ö b ¿Í ÇÔ¼ö c °¡ ¼­·Î°¡ ¼­·Î¸¦ È£ÃâÇÏ´Â °æ¿ì, ÇÔ¼ö a, b, c´Â ÇϳªÀÇ ½ÎÀÌŬÀ» Çü¼ºÇÑ´Ù. ¿©±â¼­ ÇÑ °¡Áö À¯ÀÇÇÒ Á¡Àº ÇÔ¼ö b °¡ ÇÔ¼ö a ¸¦ È£ÃâÇÏ°í ÇÔ¼ö a ¿¡¼­´Â ÇÔ¼ö b ¸¦ È£ÃâÇÏÁö ¾Ê´Â °æ¿ì¿¡µµ( gprof ´ÂÀÌ·¯ÇÑ »óȲÀ» ±¸ºÐÇÒ ¼ö ¾ø±â ¶§¹®¿¡), a ¿Í b¸¦ ÇϳªÀÇ ½ÎÀÌŬ·Î °£ÁÖÇÑ´Ù´Â °ÍÀÌ´Ù.

½ÎÀÌŬ¿¡´Â ¿¬¼ÓÀûÀÎ Á¤¼ö°ªÀ¸·Î ¹øÈ£°¡ ºÎ¿©µÈ´Ù. ¾î¶² ÇÔ¼ö°¡ ÇϳªÀÇ ½ÎÀÌŬ¿¡ ¼ÓÇÒ¶§¸¶´Ù, ¸Å¹ø ÇÔ¼öÀÇ À̸§ÀÌ call graph³»¿¡ ³ªÅ¸³ª°í ÇÔ¼ö À̸§µÚ¿¡ ÇÔ¼ö°¡ ¼ÓÇÏ´Â ½ÎÀÌŬ ¹øÈ£ `<cycle number>' Ãß°¡µÈ´Ù.

½ÎÀÌŬÀÌ ¹®Á¦°¡ µÇ´Â ÀÌÀ¯´Â ½ÎÀÌŬÀÌ Á¸ÀçÇÏ´Â °æ¿ì call graph³»¿¡ ÀÖ´Â ½Ã°£ °ªµé¿¡ ¸ð¼øÀÌ »ý±â±â ¶§¹®ÀÌ´Ù. ÇÔ¼ö a ÀÇ children¿¡¼­ ¼ÒºñµÈ ½Ã°£¿¡´Â ÇÔ¼ö a ÀÇ ¼­ºê·çƾÀÎ b ¿Í b ÀÇ ¼­ºê·çƾ¿¡¼­ ¼ÒºñµÈ ½Ã°£ÀÌ Æ÷ÇԵǾî¾ß¸¸ ÇÏÁö¸¸, b ÀÇ ¼­ºê·çƾÁß¿¡´Â a°¡ Àֱ⠶§¹®¿¡ ¹®Á¦°¡ µÈ´Ù. Áï,   ÇÔ¼ö a °¡ °£Á¢ Àç±Í È£Ãâ ÇüÅÂÀ϶§, ÇÔ¼ö a¿¡¼­ÀÇ ½Ã°£Áß ¾ó¸¶¸¸Å­À» ÇÔ¼ö aÀÇ children¿¡¼­ ¼ÒºñµÈ ½Ã°£¿¡ ¹Ý¿µÇÒ °ÍÀΰ¡¶ó´Â Àǹ®ÀÌ »ý±â°Ô µÈ´Ù.

gprof ¿¡¼­´Â ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÏ¿© ÀüüÀûÀÎ ½ÎÀÌŬ¿¡ ´ëÇÏ¿© ÇϳªÀÇ ½Ì±Û ¿£Æ®¸®¸¦ ¸¸µç´Ù. ÀÌ ½Ì±Û ¿£Æ®¸®ÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀο¡ ½ÎÀÌŬÀ» Çü¼ºÇÏ°í ÀÖ´Â ÇÔ¼öµé¿¡¼­ Á÷Á¢ÀûÀ¸·Î ¼ÒºñµÈ ÃÑ ½Ã°£À» ±â¼úÇÑ´Ù. ½ÎÀÌŬÀÇ "¼­ºê·çƾµé"Àº ½ÎÀÌŬÀ» ±¸¼ºÇÏ°í ÀÖ´Â °³º° ÇÔ¼öµé°ú ½ÎÀÌŬÀ» ±¸¼ºÇÏ°í ÀÖ´Â ÇÔ¼öµé¿¡¼­ Á÷Á¢ÀûÀ¸·Î È£ÃâµÈ ´Ù¸¥ ¸ðµç ÇÔ¼öµéÀÇ ÁýÇÕÀ¸·Î Á¤ÀÇÇÑ´Ù. ½ÎÀÌŬÀÇ "caller ÇÔ¼öµé"Àº ½ÎÀÌŬÀÇ ¿ÜºÎ¿¡ ÀÖ´Â ÇÔ¼öÁß ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÔ¼öµéÀÇ ÁýÇÕÀ¸·Î Á¤ÀÇÇÑ´Ù.

´ÙÀ½ÀÇ ¿¹´Â ÇÔ¼ö a ¿Í ÇÔ¼ö b°¡ Æ÷ÇÔµÈ ½ÎÀÌŬÀ» ³ªÅ¸³»´Â call graphÀÇ ÀϺκÐÀÌÀÌ´Ù. main ÇÔ¼ö¿¡¼­ a ÇÔ¼ö È£ÃâÀ» ÅëÇÏ¿© ½ÎÀÌŬ¿¡ ÁøÀÔÇÏ°Ô µÇ°í ÇÔ¼ö a ¿Í b´Â ¸ðµÎ ÇÔ¼ö c¸¦ È£ÃâÇÏ°í ÀÖ´Â »óȲÀÌ´Ù.

index  % time    self  children called     name
----------------------------------------
                 1.77        0    1/1        main [2]
[3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
                 1.02        0    3          b <cycle 1> [4]
                 0.75        0    2          a <cycle 1> [5]
----------------------------------------
                                  3          a <cycle 1> [5]
[4]     52.85    1.02        0    0      b <cycle 1> [4]
                                  2          a <cycle 1> [5]
                    0        0    3/6        c [6]
----------------------------------------
                 1.77        0    1/1        main [2]
                                  2          b <cycle 1> [4]
[5]     38.86    0.75        0    1      a <cycle 1> [5]
                                  3          b <cycle 1> [4]
                    0        0    3/6        c [6]
----------------------------------------

(ÀÌ ÇÁ·Î±×·¥¿¡ ´ëÇÑ Àüü call graph¿¡¼­´Â Ãß°¡ÀûÀ¸·Î main ÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®¿Í c ÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®°¡ Æ÷ÇԵǸç, main ÇÔ¼ö´Â a, ÇÔ¼ö¸¦ È£ÃâÇÏ°í, ÇÔ¼ö c´Â ÇÔ¼ö a ¿Í ÇÔ¼ö b¸¦ caller·Î °¡Áø´Ù.)

index  % time    self  children called     name
                                             <spontaneous>
[1]    100.00       0     1.93    0      start [1]
                 0.16     1.77    1/1        main [2]
----------------------------------------
                 0.16     1.77    1/1        start [1]
[2]    100.00    0.16     1.77    1      main [2]
                 1.77        0    1/1        a <cycle 1> [5]
----------------------------------------
                 1.77        0    1/1        main [2]
[3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
                 1.02        0    3          b <cycle 1> [4]
                 0.75        0    2          a <cycle 1> [5]
                    0        0    6/6        c [6]
----------------------------------------
                                  3          a <cycle 1> [5]
[4]     52.85    1.02        0    0      b <cycle 1> [4]
                                  2          a <cycle 1> [5]
                    0        0    3/6        c [6]
----------------------------------------
                 1.77        0    1/1        main [2]
                                  2          b <cycle 1> [4]
[5]     38.86    0.75        0    1      a <cycle 1> [5]
                                  3          b <cycle 1> [4]
                    0        0    3/6        c [6]
----------------------------------------
                    0        0    3/6        b <cycle 1> [4]
                    0        0    3/6        a <cycle 1> [5]
[6]      0.00       0        0    6      c [6]
----------------------------------------

½ÎÀÌŬÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ self Çʵå´Â ½ÎÀÌŬÀ» Çü¼ºÇÏ´Â ¸ðµç ÇÔ¼öµé¿¡¼­ ¼ÒºñµÈ ÃÑ ½Ã°£À» ³ªÅ¸³»¸ç ÀÌ °ªÀº ½ÎÀÌŬÀ» ±¸¼ºÇÏ´Â °³º° ÇÔ¼öµé¿¡¼­ÀÇ self Çʵ尪 (À̵é ÇÔ¼öÀÇ subroutine-line¿¡ ÀÖ´Â ¿£Æ®¸®¿¡¼­ ÀÌ °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù)ÀÇ ÇÕ°ú °°°Ô µÈ´Ù.

½ÎÀÌŬÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀΰú subroutine-line¿¡ ÀÖ´Â children ÇʵåÀÇ °ªÀº ½ÎÀÌŬ ¿ÜºÎ¿¡ ÀÖ´Â ¼­ºê·çƾ¸¸À» Ä«¿îÆ®ÇÑ °ªÀÌ´Ù. ÇÔ¼ö a °¡ ÇÔ¼ö b¸¦ È£ÃâÇÏ¿´´ÙÇÏ¿©µµ, ÇÔ¼ö b¸¦ È£ÃâÇÑ ÇÔ¼öµé¿¡¼­ ¼ÒºñµÈ ½Ã°£Àº ÇÔ¼ö aÀÇ children ÀÇ ½Ã°£¿¡´Â Ä«¿îÆ®µÇÁö ¾Ê´Â´Ù. µû¶ó¼­, b ¸¦ È£ÃâÇÑ ÇÔ¼öµéÀÇ ½Ã°£¿¡ ÇÔ¼ö a ·ÎÀÇ ¿ª¹æÇâ °£Á¢ Àç±Í È£Ãâ(indirect recursive calls back to a)ÀÌ Æ÷ÇԵǴ ¹®Á¦¸¦ ÇÇÇÒ ¼ö ÀÖ´Ù.

½ÎÀÌŬÀÇ ¿£Æ®¸®¿¡ ÀÖ´Â caller-lineÀÇ children Çʵå´Âcaller°¡ ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¸¦ È£ÃâÇßÀ» ¶§, ½ÎÀÌŬ Àüü¿Í ½ÎÀÌŬÀÇ ´Ù¸¥ ¼­ºê·çƾ¿¡¼­ ¿¡¼­ ¼ÒºñµÈ ½Ã°£·®¿¡ ´ëÇÑ ÃßÁ¤°ªÀÌ´Ù

½ÎÀÌŬ¿¡ ÇØ´çÇÏ´Â ÇÁ¶óÀ̸Ӹ® ¶óÀο¡ ÀÖ´Â calls Çʵå´Â µÎ °³ÀÇ ¼öÄ¡¸¦ °¡Áö°í ÀÖ´Ù. ù ¹ø° ¼öÄ¡´Â ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö°¡ ½ÎÀÌŬ ¿ÜºÎ¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ÀÇÇØ È£ÃâµÈ Ƚ¼öÀ̸ç, µÎ ¹ø° ¼öÄ¡´Â ½ÎÀÌŬ ³»¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ÀÇÇØ ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö°¡ È£ÃâµÈ Ƚ¼öÀÌ´Ù( ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö°¡ ÀÚ±â ÀÚ½ÅÀ» È£ÃâÇßÀ» °æ¿ì, ÀÌ ½Ã°£µµ Æ÷ÇÔµÈ °ªÀÌ´Ù). calls Çʵ忡 ÀÖ´Â µÎ °³ÀÇ ¼öÄ¡°ªÀº È£Ãâ Ƚ¼ö¸¦ Àç±Í È£Ãâ(recursive call) Ƚ¼ö°ú ºñÀç±Í È£Ãâ (nonrecursive call) Ƚ¼ö·Î ºÐ·ùÇÑ °ÍÀÇ ÀϹÝÈ­ÀÌ´Ù.

½ÎÀÌŬÀÇ ¿£Æ®¸®¿¡ ÀÖ´Â ½ÎÀÌŬÀ» ±¸¼ºÇÏ´Â ÇÔ¼ö¿¡ ´ëÇÑ subroutin-lineÀÇ calls Çʵå´Â ±× ÇÔ¼ö°¡ ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ÀÇÇØ È£ÃâµÈ Ƚ¼ö¸¦ ³ªÅ¸³½´Ù. ÀÌ Çʵ尪Àº ÀüºÎ ´õÇÑ °ªÀÌ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ  calls ÇʵåÀÇ µÎ ¹ø° °ªÀÌ´Ù.

½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ´ëÇÑ °³º° ¿£Æ®¸®¿¡´Â µ¿ÀÏÇÑ ½ÎÀÌŬ³»¿¡ ÀÖ´Â ´Ù¸¥ ÇÔ¼öµéÀÌ ¼­ºê·çƾ(callees, subroutines)°ú callers·Î½á subroutine-line°ú caller-line¿¡ ³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. subroutine-line°ú caller-lineÀº ½ÎÀÌŬ³»¿¡ ÀÖ´Â °¢°¢ÀÇ ÇÔ¼ö°¡ È£ÃâµÈ Ƚ¼ö ¶Ç´Â ½ÎÀÌŬ³»¿¡¼­ ¼­·Î°£¿¡ ¾ó¸¶³ª È£ÃâÀÌ µÇ¾ú´ÂÁö¸¦ º¸¿©ÁØ´Ù. subroutine-line°ú caller-line¿¡ ÀÖ´Â self ÇÊµå ¹× children Çʵå´Â Àç±ÍÈ£ÃâÀÌ °è¼ÓµÉ ¶§ ÀÌ ÇʵåÀÇ Àǹ̸¦ Á¤ÀÇÇϱ⠰ï¶õÇϱ⠶§¹®¿¡ °ø¶õÀ¸·Î Ç¥½ÃÇÑ´Ù.

¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ(Line-by-line Profiling)

gprofÀÇ `-l' ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÇÁ·Î±×·¥ÀÌ ¶óÀÎ ´ÜÀ§ÀÇ ÇÁ·ÎÆÄÀϸµÀ» Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå¿¡¼­, È÷½ºÅä±×·¥ »ùÇõéÀº ÇÔ¼öº°·Î Àû¿ëµÇ´Â ´ë½Å¿¡ ¼Ò½º ÄÚµå ³»ÀÇ °¢°¢ÀÇ ¶óÀκ°·Î Àû¿ëµÈ´Ù. ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµÀ» À§Çؼ­´Â ¼Ò½ºÄÚµå ¶óÀο¡ ´ëÇÑ µð¹ö±ë ½Éº¼ Á¤º¸°¡ ÇÊ¿äÇϹǷÎ,  µð¹ö±ë ½Éº¼ Á¤º¸¸¦ »ý¼ºÇϱâ À§Çؼ­ ÄÄÆÄÀÏ ½Ã¿¡ `-pg' ¿¡ `-g' ¿É¼ÇÀ» Ãß°¡ÇÏ¿© ÄÄÆÄÀÏÇÏ¿©¾ß ÇÑ´Ù.

¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå¿¡¼­ °¡Àå À¯¿ëÇÑ Ãâ·Â Å×À̺íÀº flat profileÀÌ´Ù. ÇöÀç ¹öÀüÀÇ gprof ¿¡¼­´Â call graph arcs¸¦ ¼Ò½º ÄÚµå ¶óÀο¡¼­ ÇØ´ç ¼Ò½º ÄÚµå¶óÀÎÀ» Æ÷ÇÔÇÏ´Â ÇÔ¼ö·Î Àü´ÞÇÏÁö ¸øÇϱ⠶§¹®¿¡ call graph´Â ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ¸ðµå¿¡¼­ ÀÏ¹Ý ¸ðµå(ÇÔ¼ö ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå)¿¡¼­¸¸Å­Àº À¯¿ëÇÏÁö ¾Ê´Ù.

¾Æ·¡ÀÇ È­¸é ´ýÇÁ´Â ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµÀ» »ç¿ëÇÏÁö ¾ÊÀº °æ¿ìÀÇ gprof Ãâ·Â °á°úÀÇ ÇÑ ¿¹ÀÌ´Ù. ct_init °¡ 4°³ÀÇ È÷½ºÅä±×·¥ hits¿¡ ÇØ´çÇÏ°í init_block ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀÌ 13327 ȸ ÀÖ¾úÀ½À» À¯ÀÇÇÏ¿© º¸±â ¹Ù¶õ´Ù.

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 30.77      0.13     0.04     6335     6.31     6.31  ct_init

		     Call graph (explanation follows)

granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds

index % time    self  children    called     name

                0.00    0.00       1/13496       name_too_long
                0.00    0.00      40/13496       deflate
                0.00    0.00     128/13496       deflate_fast
                0.00    0.00   13327/13496       ct_init
[7]      0.0    0.00    0.00   13496         init_block

 

´ÙÀ½Àº µ¿ÀÏÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í, ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå·Î gprof Ãâ·ÂÇßÀ» ¶§ÀÇ È­¸é ´ýÇÁÀÇ ÀϺÎÀÌ´Ù. ct_init¿¡¼­ÀÇ 4°³ÀÇ È÷½ºÅä±×·¥ hits°¡ ¼Ò½ºÄڵ忡 ÀÖ´Â ³× °³ÀÇ ¶óÀκ°·Î ³ª´µ¾îÁ³À½À» À¯ÀÇÇÏ¿© º¸±â ¹Ù¶õ´Ù. ¶óÀιøÈ£ 49, 351, 382, 385¿¡¼­ °¢°¢ ÇϳªÀÇ hit°¡ ¹ß»ýÇÏ¿´À½À» º¼ ¼ö ÀÖ´Ù. Call graph¿¡¼­ ct_init ÇÔ¼ö¿¡¼­ init_block ÇÔ¼ö¸¦ 13327 ¹ø È£ÃâÇÑ °ªÀÌ ¶óÀÎ 396¿¡¼­ÀÇ 1ȸ È£Ãâ, ¶óÀÎ 384¿¡¼­ÀÇ 3071ȸ È£Ãâ, ¶óÀÎ 385¿¡¼­ÀÇ 730 È£Ãâ, ¶óÀÎ 387¿¡¼­ÀÇ 6525ȸ È£Ãâ·Î Á»´õ ¼¼ºÐÈ­ÇÏ¿© ºÐ·ùµÈ °Íµµ ÁÖÀÇÇÏ¿© º¸¾Æ¾ß ÇÒ ºÎºÐÀÌ´Ù.

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self                    
 time   seconds   seconds    calls  name    
  7.69      0.10     0.01           ct_init (trees.c:349)
  7.69      0.11     0.01           ct_init (trees.c:351)
  7.69      0.12     0.01           ct_init (trees.c:382)
  7.69      0.13     0.01           ct_init (trees.c:385)

		     Call graph (explanation follows)

granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds

  % time    self  children    called     name

            0.00    0.00       1/13496       name_too_long (gzip.c:1440)
            0.00    0.00       1/13496       deflate (deflate.c:763)
            0.00    0.00       1/13496       ct_init (trees.c:396)
            0.00    0.00       2/13496       deflate (deflate.c:727)
            0.00    0.00       4/13496       deflate (deflate.c:686)
            0.00    0.00       5/13496       deflate (deflate.c:675)
            0.00    0.00      12/13496       deflate (deflate.c:679)
            0.00    0.00      16/13496       deflate (deflate.c:730)
            0.00    0.00     128/13496       deflate_fast (deflate.c:654)
            0.00    0.00    3071/13496       ct_init (trees.c:384)
            0.00    0.00    3730/13496       ct_init (trees.c:385)
            0.00    0.00    6525/13496       ct_init (trees.c:387)
[6]  0.0    0.00    0.00   13496         init_block (trees.c:408)

 

Annotated source¸®½ºÆÃ(Annotated Source Listing)

gprofÀÇ `-A' ¿É¼ÇÀ» »ç¿ëÇϸé annotate source ¸®½ºÆÃÀ» ¾òÀ» ¼ö ÀÖ´Ù. annotated source ¸®½ºÆÃÀº ÇÁ·Î±×·¥ ¼Ò½º¿¡ °¢°¢ÀÇ ÇÔ¼ö°¡ È£ÃâµÈ Ƚ¼ö°¡ Æ÷ÇԵǾîÁø °ÍÀÌ´Ù. gprof °¡ ¿ø·¡ÀÇ ¼Ò½º ÄÚµå ÆÄÀÏÀ» ãÁö ¸øÇÏ´Â °æ¿ì¿¡´Â `-I' ¿É¼ÇÀ¸·Î ¼Ò½º ÄÚµå ÆÄÀÏÀÇ °æ·Î¸íÀ» ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.

¾Æ·¡¿Í °°ÀÌ ÄÄÆÄÀÏ ¿É¼ÇÀ» ÁöÁ¤Çϸé ÇÔ¼ö Ä«¿îÆà ÄÚµå(function counting code)¿¡ Ãß°¡ÇÏ¿© ±âº» ºí·Ï Ä«¿îÆà ÄÚµå(block counting code)°¡ ÇÁ·Î±×·¥¿¡ Æ÷ÇԵǾîÁø´Ù.

`gcc ... -g -pg -a'

ÄÄÆÄÀÏ ½Ã¿¡ À§¿Í °°Àº ¿É¼Ç ¼³Á¤Àº gprof ¿¡¼­ ÄÚµåÀÇ °¢ ¶óÀÎÀÌ ½ÇÇàµÈ Ƚ¼ö¸¦ °áÁ¤ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. gzip ¼Ò½º¿¡¼­ ¹ßÃéÇÑ ´ÙÀ½ ÇÔ¼öÀÇ Äڵ带 ¿¹·Î »ìÆ캸ÀÚ. (¶óÀÎÀÇ ¾Õ¿¡ ÀÖ´Â ¼ýÀÚ´Â ¶óÀÎ ¹øÈ£ÀÌ´Ù.)

 1 ulg updcrc(s, n)
 2     uch *s;
 3     unsigned n;
 4 {
 5     register ulg c;
 6
 7     static ulg crc = (ulg)0xffffffffL;
 8
 9     if (s == NULL) {
10         c = 0xffffffffL;
11     } else {
12         c = crc;
13         if (n) do {
14             c = crc_32_tab[...];
15         } while (--n);
16     }
17     crc = c;
18     return c ^ 0xffffffffL;
19 }

 

À§ÀÇ Äڵ忡¼­ pdcrc ÇÔ¼ö´Â ÃÖ¼Ò 5°³ÀÇ ±âº» ºí·ÏÀ» °¡Áö°í ÀÖ´Ù. ù ¹ø° ±âº» ºí·ÏÀº ÇÔ¼ö ÀÚüÀÌ°í, µÎ ¹ø°¿Í ¼¼ ¹ø° ±âº» ºí·ÏÀº ¶óÀÎ 9ÀÇ if ¹®Àº if ÀÇ Á¶°Ç ÆÇ´Ü¿¡ µû¸¥ ºÐ±â¿¡ µû¶ó ¸¸µé¾îÁö´Â µÎ °³ ÀÌ»óÀÇ ±âº» ºí·ÏÀ̸ç, ³× ¹ø° ±âº» ºí·°Àº ¶óÀÎ 13ÀÇ if ¹®¿¡ ÀÇÇØ Á¤ÀǵǴ ±âº» ºí·ÏÀ̸ç, ´Ù¼¸ ¹ø° ±âº» ºí·ÏÀº do ·çÇÁÀÇ ³»¿ë¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â ±âº» ºí·°ÀÌ´Ù. ÄÄÆÄÀÏ·¯¿¡¼­ ¿©·¯ °¡Áö Ư¼öÇÑ °æ¿ì¸¦ ó¸®Çϱâ À§ÇÏ¿© Ãß°¡ÀûÀÎ ±âº» ºí·ÏµéÀ» ¸¸µé¾î ³¾ ¼öµµ ÀÖ´Ù.

±âº» ºí·Ï Ä«¿îÆà Äڵ尡 Ãß°¡µÈ ÇÁ·Î±×·¥Àº gprof -l -A ¿É¼ÇÀ» »ç¿ëÇÏ¿© ºÐ¼®ÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ `-x' ¿É¼ÇÀº ¼Ò½ºÄÚµåÀÇ °¢°¢ÀÇ ¶óÀÎÀÌ ÃÖ¼Ò 1ȸÀÌ»ó ·¹À̺íµÇ°Ô ÇϹǷΠ`-x' ¿É¼ÇÀ» Ãß°¡ÇÏ¿© »ç¿ëÇϱ⸦ ±ÇÀåÇÑ´Ù. ¾Æ·¡ÀÇ ¿¹´Â gzip ½ÇÇàÀ» ÅëÇØ ¾òÀº updcrc ÇÔ¼öÀÇ annotated source ¸®½ºÆÃÀÌ´Ù.

                ulg updcrc(s, n)
                    uch *s;
                    unsigned n;
            2 ->{
                    register ulg c;
                
                    static ulg crc = (ulg)0xffffffffL;
                
            2 ->    if (s == NULL) {
            1 ->	c = 0xffffffffL;
            1 ->    } else {
            1 ->	c = crc;
            1 ->        if (n) do {
        26312 ->            c = crc_32_tab[...];
26312,1,26311 ->        } while (--n);
                    }
            2 ->    crc = c;
            2 ->    return c ^ 0xffffffffL;
            2 ->}

À§ÀÇ ¿¹¿¡¼­ º¸´Â °Í°ú °°ÀÌ updcrc ÇÔ¼ö´Â 2ȸ È£ÃâµÇ¾úÀ¸¸ç, ¶óÀÎ 9¿¡ ÀÖ´Â if ¹®ÀÇ °¢°¢ÀÇ ºÐ±â¸¦ Çѹø¾¿ Åë°úÇÏ¿´À½À» ¾Ë ¼ö ÀÖ´Ù. do ·çÇÁ º»Ã¼´Â ÃÑ 26312 ȸ ½ÇÇàµÇ¾ú´Ù. while ¹®°ú °ü·ÃµÈ annotationÀ» ÁÖÀÇÇÏ¿© º¸¸é, °¢ iteration´ç 1¹ø¾¿ 26312ȸ ½ÇÇàµÇ¾ú´Ù. 26312ȸÀÇ ½ÇÇàÁß 1¹øÀº ( 26312¹ø° ½ÇÇà) while ¹®À» exitÇϴµ¥ »ç¿ëµÇ¾ú°í ³ª¸ÓÁö 26311ȸÀÇ ½ÇÇàÀº ·çÇÁÀÇ ½ÃÀÛ½ÃÁ¡À¸·ÎÀÇ ¿ª¹æÇ⠺б⿡¼­ »ç¿ëµÈ °ÍÀÌ´Ù.


óÀ½, ÀÌÀü, ´ÙÀ½, ¸¶Áö¸· ¼½¼Ç, ¸ñÂ÷