57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
$Id: README.memoryleak,v 1.4 2006-10-29 23:00:52 bagder Exp $
 | 
						|
                                  _   _ ____  _     
 | 
						|
                              ___| | | |  _ \| |    
 | 
						|
                             / __| | | | |_) | |    
 | 
						|
                            | (__| |_| |  _ <| |___ 
 | 
						|
                             \___|\___/|_| \_\_____|
 | 
						|
 | 
						|
             How To Track Down Suspected Memory Leaks in libcurl
 | 
						|
             ===================================================
 | 
						|
 | 
						|
Single-threaded
 | 
						|
 | 
						|
  Please note that this memory leak system is not adjusted to work in more
 | 
						|
  than one thread. If you want/need to use it in a multi-threaded app. Please
 | 
						|
  adjust accordingly.
 | 
						|
 | 
						|
 | 
						|
Build
 | 
						|
 | 
						|
  Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with
 | 
						|
  --enable-debug fixes this). 'make clean' first, then 'make' so that all
 | 
						|
  files actually are rebuilt properly. It will also make sense to build
 | 
						|
  libcurl with the debug option (usually -g to the compiler) so that debugging
 | 
						|
  it will be easier if you actually do find a leak in the library.
 | 
						|
 | 
						|
  This will create a library that has memory debugging enabled.
 | 
						|
 | 
						|
Modify Your Application
 | 
						|
 | 
						|
  Add a line in your application code:
 | 
						|
 | 
						|
       curl_memdebug("dump");
 | 
						|
 | 
						|
  This will make the malloc debug system output a full trace of all resource
 | 
						|
  using functions to the given file name. Make sure you rebuild your program
 | 
						|
  and that you link with the same libcurl you built for this purpose as
 | 
						|
  described above.
 | 
						|
 | 
						|
Run Your Application
 | 
						|
 | 
						|
  Run your program as usual. Watch the specified memory trace file grow.
 | 
						|
 | 
						|
  Make your program exit and use the proper libcurl cleanup functions etc. So
 | 
						|
  that all non-leaks are returned/freed properly.
 | 
						|
 | 
						|
Analyze the Flow
 | 
						|
 | 
						|
  Use the tests/memanalyze.pl perl script to analyze the dump file:
 | 
						|
 | 
						|
    tests/memanalyze.pl dump
 | 
						|
 | 
						|
  This now outputs a report on what resources that were allocated but never
 | 
						|
  freed etc. This report is very fine for posting to the list!
 | 
						|
 | 
						|
  If this doesn't produce any output, no leak was detected in libcurl. Then
 | 
						|
  the leak is mostly likely to be in your code.
 |