関数トレーサを実装して、関数の実行にどれくらいの時間がかかるかを調べたいと思います。私は、関数の内部から関数の名前を取得する方法があるかどうかを知りたいC++関数の中で関数名を取得する方法はありますか?
class FuncTracer
{
public:
FuncTracer(LPCTSTR strFuncName_in)
{
m_strFuncName[0] = _T('\0');
if(strFuncName_in ||
_T('\0') != strFuncName_in[0])
{
_tcscpy(m_strFuncName,strFuncName_in);
TCHAR strLog[MAX_PATH];
_stprintf(strLog,_T("Entering Func:- <%s>"),m_strFuncName);
LOG(strLog)
m_dwEnterTime = GetTickCount();
}
}
~FuncTracer()
{
TCHAR strLog[MAX_PATH];
_stprintf(strLog,_T("Leaving Func:- <%s>, Time inside the func <%d> ms"),m_strFuncName, GetTickCount()-m_dwEnterTime);
LOG(strLog)
}
private:
TCHAR m_strFuncName[MAX_PATH];
DWORD m_dwEnterTime;
};
void TestClass::TestFunction()
{
// I want to avoid writing the function name maually..
// Is there any macro (__LINE__)or some other way to
// get the function name inside a function ??
FuncTracer(_T("TestClass::TestFunction"));
/*
* Rest of the function code.
*/
}
- :私は同じのために以下のクラスがありますか?基本的には、私のクラスのユーザーが同じオブジェクトを単純に作成したいと思っています。関数名を渡すことはできません。
VS2003で動作しますが、VC6で動作しません。 – Canopus
何が問題なのですか?マクロはコンパイラによって認識されません、または何ですか? – sharptooth
はい。 VC6のコンパイルでは、宣言されていない識別子として__FUNCTION__と表示されます。私は何かを逃しているのですか、それともサポートされていませ – Canopus