|
From: Marian K. <mar...@ci...> - 2012-04-24 06:56:56
|
Dear Valgrind community, I am currently trying to use massif on a huge programming project, and I want to isolate some allocations that aren't significant. I use the --ignore-fn option like this: valgrind --tool=massif --ignore-fn=SDL_CreateRGBSurface --ignore-fn='CCircletechString::DebugUpdateL()' --ignore-fn='CSDLUtil::CreateFontTextureBuffer(MShineFont&,unsigned int,unsigned int)' (etc etc etc) ./a.out Now... some of the ignores are respected, for example CCircletechString::DebugUpdateL(), and some of them aren't, for example CSDLUtil::CreateFontTextureBuffer(MShineFont&,unsigned int,unsigned int). It is always the same ignores that aren't respected (the respecting behavior does not change between massif runs). The non-respected ignores show up in the final memory log. Many, but not all the ignores that aren't respected are ignores of static C++ methods. The non-respected method CSDLUtil::CreateFontTextureBuffer(MShineFont&,unsigned int,unsigned int) returns something, but even if I try to overwrite the ignore like this: valgrind --tool=massif --ignore-fn=SDL_CreateRGBSurface --ignore-fn='CCircletechString::DebugUpdateL()' --ignore-fn='TFontTextureBuffer* CSDLUtil::CreateFontTextureBuffer(MShineFont&,unsigned int,unsigned int)' (etc. etc. etc.) ./a.out it does not help at all. Is it possible that --ignore-fn does not work with static C++ methods? Using the --verbose flag while running massif seems to indicate that all the --ignore-fn options are parsed: 0 ... SDL_CreateRGBSurface 1 ... CCircletechString::DebugUpdateL() 2 ... CSDLUtil::CreateFontTextureBuffer(MShineFont&,unsigned int,unsigned int) etc. The code is a mixture of C (about 5 per cent of the code) and C++ (the rest of the code). My version of valgrind is 3.6.1. I compiled valgrind 3.7.0 from sources to test it, it (mis)behaves the same. The Linux kernel is 3.2. Any help is appreciated. Marian Kechlibar |