From 3ae5710b7f7752e53756b80fab0c3fe9d147ec69 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Fri, 13 Sep 2002 20:01:42 +0000 Subject: [PATCH] Initial revision --- COPYING | 340 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ blueedge.jpg | Bin 0 -> 472 bytes index.html | 130 ++++++++++++++++++++++ memprof.jpg | Bin 0 -> 62968 bytes memtools.html | 79 ++++++++++++++ 5 files changed, 549 insertions(+) create mode 100644 COPYING create mode 100644 blueedge.jpg create mode 100644 index.html create mode 100644 memprof.jpg create mode 100644 memtools.html diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/blueedge.jpg b/blueedge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f54a2009d2b030ba2a351ff4e6b1ca1fca4c80ac GIT binary patch literal 472 zcwYN|!gK` U-8JqrdAQ)H2*cn5_Wy4J072w0Bme*a literal 0 HcwPel00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..fb524ef --- /dev/null +++ b/index.html @@ -0,0 +1,130 @@ + + +MemProf + + + + +

MemProf - Profiling and leak detection

+ +

Introduction

+ +

+ MemProf is a tool for profiling memory usage and finding + memory leaks. Its two major features are: +

+ +
    +
  • It can generate a profile how much memory was + allocated by each function in your program.
  • + +
  • It can scan memory and find blocks that you've + allocated but are no longer referenced anywhere.
  • +
+ +

+ MemProf works by pre-loading a library to override the + C library's memory allocation functions and does not + require you to recompile your program. +

+ +

+ One advantage MemProf has over some other similar + tools that are available is that it has a nice GUI + frontend and is relatively easy to use. +

+ +

Changes in 0.4.1

+

+ This is motly a bug fix release - it fixes problems with + recent versions of libc, a crash when using menu accelerators, + a problem with leaving sockets around, and so forth. +

+

+ It also includes a bunch more translations and a feature + to do regular-expression based exclusion of funtions + from Martin Baulig. +

+ +

Changes in 0.4.0

+

+ The backend in 0.4.0 has been almost totally rewritten + to support profiling threaded programs and to follow + the children of programs that fork. +

+

+ The front end has also been improved in a number of + ways, translations have been added for 12 languages, + and numerous bugs have been fixed by myself and others. +

+

+ Numerous bugs have most likely also been added, so please + try it out, find them, and let me know. +

+ +

Requirements>

+ +
    +
  • Linux 2.2 or better. + (2.0 kernels may also work, but have not been tested recently.) +
  • GNU libc 2.1 + (glibc 2.0 may also work, but has not been tested recently.) +
  • GTK+ 1.2 +
  • GNOME libraries +
  • libglade, version 0.7 or better +
  • libbfd and libiberty from the GNU binutils distribution. + (Debian users will probably need to install the binutils-dev package) +
+ +

+Tarballs and packages for the last three requirements can +be obtained from: +

+

+ +

Download

+ + + +

License

+ +Memprof is Copyright Red Hat Inc, 1999-2000, and licensed +under the terms of the +GNU General Public License. + +

Other similar tools

+ +

+The technique that MemProf uses for detecting leaks, scanning +memory for pointers, is the basis of the Boehm Garbage +Collector. While the Boehm GC is mostly meant for memory +management, it also has a mode for leak detection +in programs that manually free memory. The package, +unlike MemProf, is highly portable. +

+ +

+Keith Packard wrote a memory debugging library (memleak) +included with X that does leak detection. This was +separated out from the X distribution by Jon Christopher +and turned into the standalone +Debauch +package. From the documentation Debauch seems similar +to MemProf in scope and techniques but somewhat more comprehensive +and portable. It doesn't, however, have MemProf's nice GUI frontend. +

+ +
+ +

By Owen Taylor +<otaylor@redhat.com>

+

Return to my home page + + \ No newline at end of file diff --git a/memprof.jpg b/memprof.jpg new file mode 100644 index 0000000000000000000000000000000000000000..712d01939396be8f4335b6608cdb659b9da64c32 GIT binary patch literal 62968 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 literal 0 HcwPel00001 diff --git a/memtools.html b/memtools.html new file mode 100644 index 0000000..ec0e5fa --- /dev/null +++ b/memtools.html @@ -0,0 +1,79 @@ + + + Memory debugging and profiling tools + + + + +

Memory debugging and profiling tools

+ +
+
GNU C Library
+
+

+ The GNU C Library includes memory checking code that can be + turned on by setting the environment variable + MALLOC_CHECK_. See the info page documentation for + more information on this feature. While fairly simple, it + is effective at finding double-frees of memory, and has + little overhead. +

+
+ +
ElectricFence
+
+

+ ElectricFence catches buffer overruns by guarding each block + of memory with write-protected pages. +

+
+ +
Boehm GC
+
+

+ The Boehm Garbage Collector is a conservative garbage + collector that works by scanning memory for pointers to + blocks of memory. While the Boehm GC is mostly meant for + memory management, it also has a mode for leak detection in + programs that manually free memory. +

+
+ +
Debauch
+
+

+ A comprehensive tool for tracking memory usage and finding + memory leaks; it works on unmodified binaries by overriding + the memory allocation functions with a LD_PRELOAD; it finds + leaks by conservatively scanning memory. It is based on a a + tool (memleak) which Keith Packard wrote while working on X. +

+
+ +
MemProf
+
+

+ MemProf (by the author of this page) is a memory leak + detector and profiler that works in a somewhat similar + fashion to Debauch. It's notable feature is a nice graphical + front end. MemProf works only on Linux. +

+
+ +
DMalloc
+
+

+ DMalloc is a very portable replacement for the C libraries + memory allocation routines with a wide range of facilities + for debugging and gathering statistics. +

+
+
+ +
+ +

By Owen Taylor + <otaylor@redhat.com>

+

Return to my home page + + \ No newline at end of file -- 2.11.4.GIT