Problem: How to profile functions in my Qt app without using gprof or spending big bucks and buying profiling tools for VS2005?
Solution: Have the following contents in a header file, Profiler.h for example.
#include <QTime>
class FunctionProfiler
{
public:
FunctionProfiler(const QString& func) {
m_function = QMetaObject::normalizedSignature( qPrintable(func) );
m_function = m_function.remove("__thiscall");
m_function = m_function.remove("__stdcall");
m_function = m_function.remove("__cdecl");
m_startTime = QTime::currentTime();
}
~FunctionProfiler() {
qint32 msecs = m_startTime.msecsTo( QTime::currentTime() );
qDebug("PROFILE: (%5d) %s", msecs, qPrintable(m_function));
}
private:
QString m_function;
QTime m_startTime;
};
#define PROFILE_THIS_FUNCTION FunctionProfiler functionProfiler(Q_FUNC_INFO);
Insert PROFILE_THIS_FUNCTION line into the first line of each function you want to profile. Compile and execute the program
by redirecting (2>) debug output to a text file. Then look for those PROFILE lines to get a approximate feel of time spent
by your functions.
This trick got me through some tough challenges in my current project. It is a no-brainer, but quite useful.