NProf 0.10は無料で使える.NET用プロファイラで問題はあるものの重宝しています。しかし、日本語のメソッド名等が文字化けします。
原因を調べたので以下にまとめます。
原因 §
おそらく、NProf.Hookプロジェクト内のHook.cppの以下の箇所で化けています。
void ProfilerHelper::GetFunctionSignature(
FunctionID functionId,
UINT32& methodAttributes,
string& returnType,
string& className,
string& functionName,
string& parameters )
{
ULONG args;
WCHAR returnTypeString[ MAX_FUNCTION_LENGTH ];
WCHAR parametersString[ MAX_FUNCTION_LENGTH ];
WCHAR functionNameString[ MAX_FUNCTION_LENGTH ];
WCHAR classNameString[ MAX_FUNCTION_LENGTH ];
GetFunctionProperties( functionId, &methodAttributes, &args,
returnTypeString, parametersString, classNameString,
functionNameString );
returnType = CW2A( returnTypeString );
parameters = CW2A( parametersString );
className = CW2A( classNameString );
functionName = CW2A( functionNameString );
}
GetFunctionPropertiesからはUnicode文字列で受け取っているにも関わらず、ここでcharの文字列であるstring型に変換してしまっています。string型はVisual C++のヘッダーファイルxstringで定義されている型で、隣にはwchar_tを使った同等のwstring型も定義されています。
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
typedef basic_string<wchar_t, char_traits<wchar_t>,
allocator<wchar_t> > wstring;
おそらく、Hook.cppだけwstringを使うように直せば文字化けは直ると思われますが、単純置換だけでは上手く行きませんでした。
対処は、時間がないのに現実逃避のネタを探している優秀な技術者に任せるとしましょう。
追記 §
結局、自分でやってしまった……。がっくし。