Finding where memory was last freed?
c, debugging, memory, profiler
Solution
Yes!
Install the Windows Debugging Tools and use Application Verifier.
- File -> Add Application, select your .exe
- Under Basics, select Memory and Heaps.
- Run the debug build of your program under ntsd (ntsd yourprogram.exe).
- Reproduce the bug.
Now when you make the crash happen, you will get additional information in the debugger from AppVerifier. Use !avrf (may take a long time to run (minutes)) and it will try to give you as much useful information as possible.
You can all use the dps command on the memory address to get all the stored stack info (allocation, deallocation, etc).
You can also use the !heap command on the memory address:
0:004> !heap -p -a 0x0C46CFE0
Which will dump information as well.
Further Reading:
- Advanced Windows Debugging, Hewardt and Pravat
- Debugging with PageHeap
Problem
Very general: Is there an easy way to tell which line of code last freed a block of memory when an access violation occurs? Less general: My understanding of profilers is that they override the allocation and deallocation processes. If this is true, might they happen to store the line of code that last freed a section of memory so that when it later crashes because of an access violation, you know what freed it last? Specifics: Windows, ANSI C, using Visual Studio