Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

What strategy you use while tracking a memory-related issue? What tools do you use (open source as well as proprietary) to identify memory leaks, memory corruption etc? How would you track memory leaks if only gdb/dbx available on a system?

For me, fixing memory leaks with only a debugger is very hard.

share|improve this question
2  
Personally I think this question is more programming related than unix related. –  phunehehe Aug 11 '10 at 6:18

5 Answers 5

up vote 10 down vote accepted

If you can change the source code, Dmalloc is great; it will list which pointers were unfreed and (for code built with debugging symbols) exactly which line they were allocated on.

If you can't, Valgrind is pretty much the standard for that sort of thing. I generally find Valgrind somewhat harder to use, but it has way more features and doesn't involve adding dmalloc calls into your code

share|improve this answer
    
dmalloc is not very performant as expected in very large systems. valgrind is a better bet, and even there you will hit bottlenecks... –  execve Aug 11 '10 at 14:33
    
valgrind --tool memcheck "yourapp" will give memory related info in runtime (useful in desktop systems). Another great tool is memwatch but it should be compiled along with your source. Memwatch can log details to a file hence more suitable for embedded systems. –  rajaganesh87 Mar 19 '11 at 17:35

valgrind is amazingly helpful.

share|improve this answer

Massif (from valgrind) is one of the best way to find memory leaks. Repeat your suspicious code (or run your program long enough) and dump the result with ms_print. Usually, the call stack is giving you enough information to fix it.

With GDB, you can try to attach to a running program and call functions such as malloc_stats()

If your program is written in a different language, it might be more tricky. Recently, some GDB has gained scriptability, and people started interesting projects such as gdb-heap, which can analyze Python memory from a core dump. Similar memory analysys scripts might be possible for C++ objects.

Read also http://stackoverflow.com/questions/2564752/examining-c-c-heap-memory-statistics-in-gdb

share|improve this answer
    
+1 for link about examining heap in gdb. –  user712092 Jun 13 '12 at 15:36

For Solaris, there's several tools listed in the answers to this StackOverflow question (they include leak checking with other forms of bad memory access).

share|improve this answer

I have been doing Objective-C for some time, and there is an analyzer that deal with C level memory management and stuff like that. Clang Static Analyzer is so good that Apple decided to bundle it with their xCode IDE. I'm not sure if this is good for your question, but if you are doing C then it's worth a try.

share|improve this answer
    
Minor quibble: clang was developed for use in xcode from the start. See clang.llvm.org/clang_video-05-25-2007.html –  Daniel James Aug 11 '10 at 10:26
    
Hi Daniel, that might be true, but it wasn't included in xCode until recently (or at least not in the bundle I downloaded from Apple) –  phunehehe Aug 11 '10 at 13:48

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.