1 * Get heap-profile-table.cc using DeleteMatchingFiles 2 * Get heap-profile-table.cc using FillProcSelfMaps, DumpProcSelfMaps 3 * Play around with ExperimentalGetStackTrace 4 * Support the windows-level memory-allocation functions? See 5 /home/build/googleclient/earth/client/tools/memorytracking/client/memorytrace/src/memorytrace.cpp 6 /home/build/googleclient/total_recall/common/sitestep/* 7 http://www.internals.com/articles/apispy/apispy.htm 8 http://www.wheaty.net/APISPY32.zip 9 * Verify /proc/xxx/maps: 10 http://www.geocities.com/wah_java_dotnet/procmap/index.html 11 * Figure out how to edit the executable IAT so tcmalloc.dll is loaded first 12 * Use QueryPerformanceCounter instead of GetTickCount() (also for sparsehash) 13 14 ---- 15 More info on windows-level memory-allocation functions: 16 C runtime malloc 17 LocalAlloc 18 GlobalAlloc 19 HeapAlloc 20 VirtualAlloc 21 mmap stuff 22 23 malloc, LocalAlloc and GlobalAlloc call HeapAlloc, which calls 24 VirtualAlloc when needed, which calls VirtualAllocEx (the __sbrk equiv?) 25 26 siggi sez: If you want to do a generic job, you probably need to 27 preserve the semantics of all of these Win32 calls: 28 Heap32First 29 Heap32ListFirst 30 Heap32ListNext 31 Heap32Next 32 HeapAlloc 33 HeapCompact 34 HeapCreate 35 HeapCreateTagsW 36 HeapDestroy 37 HeapExtend 38 HeapFree 39 HeapLock 40 HeapQueryInformation 41 HeapQueryTagW 42 HeapReAlloc 43 HeapSetInformation 44 HeapSize 45 HeapSummary 46 HeapUnlock 47 HeapUsage 48 HeapValidate 49 HeapWalk 50 51 kernel32.dll export functions and nt.dll export functions: 52 http://www.shorthike.com/svn/trunk/tools_win32/dm/lib/kernel32.def 53 http://undocumented.ntinternals.net/ 54 55 You can edit the executable IAT to have the patching DLL be the 56 first one loaded. 57 58 Most complete way to intercept system calls is patch the functions 59 (not the IAT). 60 61 Microsoft has somee built-in routines for heap-checking: 62 http://support.microsoft.com/kb/268343 63 64 ---- 65 Itimer replacement: 66 http://msdn2.microsoft.com/en-us/library/ms712713.aspx 67 68 ---- 69 Changes I've had to make to the project file: 70 71 0) When creating the project file, click on "no autogenerated files" 72 73 --- For each project: 74 1) Alt-F7 -> General -> [pulldown "all configurations" ] -> Output Directory -> $(SolutionDir)$(ConfigurationName) 75 2) Alt-F7 -> General -> [pulldown "all configurations" ] -> Intermediate Directory -> $(ConfigurationName) 76 77 --- For each .cc file: 78 1) Alt-F7 -> C/C++ -> General -> [pulldown "all configurations"] -> Additional Include Directives --> src/windows + src/ 79 2) Alt-F7 -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded, debug/release, DLL or not 80 81 --- For DLL: 82 3) Alt-F7 -> Linker -> Input -> [pulldown "all configurations" ] -> Module Definition File -> src\windows\vc7and8.def 83 --- For binaries depending on a DLL: 84 3) Right-click on project -> Project Dependencies -> [add dll] 85 --- For static binaries (not depending on a DLL) 86 3) Alt-F7 -> C/C++ -> Command Line -> [pulldown "all configurations"] -> /D PERFTOOLS_DLL_DECL= 87