LINUX.ORG.RU

Я пользуюсь valgrind + kcachegrind, профилирует не время, а количество инструкций и вызовов.

YesSSS ★★★
()
Ответ на: комментарий от Zodd

Если не влом компилить - его можно собрать и без kde, для этого в его сорцах лежит Qt-шный .pro файл. Т.е. потянет только Qt.

YesSSS ★★★
()

ну, во-первых, gprof, это профайлер времени, а не количества инструкций.

во-вторых, если мсье не любит кедов, можно юзать alleyoop, он гткшный. правда, не уверен, что юзабилити эквивалентно

annulen ★★★★★
()
Ответ на: комментарий от Zodd

Запускаешь свою прогу под валгриндом:

valgrind --tool=callgrind ./myproga

После завершения проги образуются файлы вида callgrind.<номер процесса>

Открываешь их в kcachegrind.

Смотришь какие функции сколько раз вызывались и сколько инструкций исполнялись, как затраты распределялись по коду и по вложенности вызовов. Ну и т.д. Профит.

http://docs.kde.org/stable/en/kdesdk/kcachegrind/using-kcachegrind.html

YesSSS ★★★
()
Ответ на: комментарий от Zodd

Нужно включать -g, тогда кроме разбивки по функциям будет еще и связь со строками кода. Еще важна оптимизация. Если профилируешь с оптимизацией - код может немного перемешиваться из-за инлайнинга, но в целом все весьма логично.

YesSSS ★★★
()
Ответ на: комментарий от Zodd

Метод сборки без kde: качаешь пакет исходников kdesdk например отсюда: http://ftp-stud.fht-esslingen.de/Mirrors/ftp.kde.org/pub/kde/stable/4.4.1/src/ . Распаковываешь, открываешь файл проекта kdesdk-4.4.1/kcachegrind/qcachegrind/qcachegrind.pro , компилишь тем же QtCreator.

YesSSS ★★★
()
Ответ на: комментарий от YesSSS

Не пойму почему ругается при сборке

#ifndef QTCOLORBUTTON_H
#define QTCOLORBUTTON_H

#include <QtGui/QToolButton>

QT_BEGIN_NAMESPACE

class QtColorButton : public QToolButton
{
    Q_OBJECT
    Q_PROPERTY(bool backgroundCheckered READ isBackgroundCheckered WRITE setBackgroundCheckered)
public:
    QtColorButton(QWidget *parent = 0);
    ~QtColorButton();

    bool isBackgroundCheckered() const;
    void setBackgroundCheckered(bool checkered);

    QColor color() const;

public slots:

    void setColor(const QColor &color);

signals:
    void colorChanged(const QColor &color);
protected:
    void paintEvent(QPaintEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
#ifndef QT_NO_DRAGANDDROP
    void dragEnterEvent(QDragEnterEvent *event);
    void dragLeaveEvent(QDragLeaveEvent *event);
    void dropEvent(QDropEvent *event);
#endif
private:
    QScopedPointer<class QtColorButtonPrivate> d_ptr;
    Q_DECLARE_PRIVATE(QtColorButton)
    Q_DISABLE_COPY(QtColorButton)
    Q_PRIVATE_SLOT(d_func(), void slotEditColor())
};

QT_END_NAMESPACE

#endif

Вот в этом кусочке: /home/zodd/Downloads/kdesdk-4.4.1/kcachegrind/qcachegrind/qtcolorbutton.h:70: error: ISO C++ forbids declaration of ‘QScopedPointer’ with no type

private:
    QScopedPointer<class QtColorButtonPrivate> d_ptr;
    Q_DECLARE_PRIVATE(QtColorButton)
    Q_DISABLE_COPY(QtColorButton)
    Q_PRIVATE_SLOT(d_func(), void slotEditColor())
};
Zodd ★★★★★
() автор топика
Ответ на: комментарий от YesSSS

Все спасибо собрал. Все работает. Теперь осталось разобраться с профайлером, который учитывает время, из-за специфики задачи.

Zodd ★★★★★
() автор топика
Ответ на: комментарий от ott

В который раз удивляюсь прочитывая ваши статьи, спасибо за огромный труд.

Zodd ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.