Команда gprof не создает правильный out.txt - PullRequest
6 голосов
/ 01 октября 2011

Прежде всего я использую MacOSX 10.7.1. Я правильно установил все Xcode 4 и все библиотеки для работы с языком C.

У меня проблемы с запуском команды gprof в оболочке. Я объясню шаг за шагом, что я делаю, и вывод, который я получаю.

Шаг 1:

~ roger$ cd Path/to/my/workspace
~ roger$ ls

Вывод (шаг 1):

queue.c         queue.h         testqueue.c

Шаг 2:

~ roger$ gcc -c -g -pg queue.c
~ roger$ ls

Вывод (шаг 2):

queue.c         queue.h         queue.o         testqueue.c

Шаг 3:

~ roger$ gcc -o testqueue -g -pg queue.o testqueue.c
~ roger$ ls

Вывод (шаг 3):

queue.c         queue.h         queue.o         testqueue       testqueue.c

Шаг 4:

~ roger$ ./testqueue
~ roger$ ls

Вывод (шаг 4):

enqueue element 16807
head=0,tail=1
enqueue element 282475249
head=0,tail=2
enqueue element 1622650073
head=0,tail=3
enqueue element 984943658
head=0,tail=4
enqueue element 1144108930
head=0,tail=5
enqueue element 470211272
head=0,tail=6
enqueue element 101027544
head=0,tail=7
enqueue element 1457850878
head=0,tail=8
enqueue element 1458777923
head=0,tail=9
enqueue element 2007237709
head=0,tail=10
queue is full
dequeue element 16807
dequeue element 282475249
dequeue element 1622650073
dequeue element 984943658
dequeue element 1144108930
dequeue element 470211272
dequeue element 101027544
dequeue element 1457850878
dequeue element 1458777923
dequeue element 2007237709
queue is empty

gmon.out        queue.h         testqueue
queue.c         queue.o         testqueue.c

Шаг 5:

~ roger$ gprof -b testqueue gmon.out > out.txt
~ roger$ nano out.txt

Вывод (шаг 5):

  GNU nano 2.0.6               File: out.txt


granularity: each sample hit covers 4 byte(s) no time propagated
called/total       parents
index  %time    self descendents  called+self    name           index
called/total       children

^L

granularity: each sample hit covers 4 byte(s) no time accumulated

%   cumulative   self              self     total
time   seconds   seconds    calls  ms/call  ms/call  name

^L

Index by function name

Наконец-то. Выходной файл должен показать что-то вроде этого:

    %   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
...

И это показывает пустое поле.

Я искал здесь и ничего не нашел вообще. Я гуглю это, но то же самое.

Буду очень признателен, если кто-нибудь сможет мне помочь, пожалуйста.

Ответы [ 2 ]

10 голосов
/ 01 октября 2011

gprof не работает на OS X. Системный вызов, который ему нужен, был удален несколько версий назад. Непонятно, почему утилита все еще поставляется. Альтернативы - использовать dtrace и / или sample.

1 голос
/ 18 декабря 2011

не нужно указывать gmon.out в последней строке, укажите gprof -b testqueue> out.txt, смотрите http://www.network -theory.co.uk / docs / gccintro / gccintro_80.html для дальнейшегоссылка

...