Short: trace unmatched allocs to find mem leaks Author: thomas.richter@alumni.tu-berlin.de (Thomas Richter) Uploader: thomas richter alumni tu-berlin de (Thomas Richter) Type: dev/debug Version: 1.01 Architecture: m68k-amigaos >= 2.0.4 ----------------------------------------------------------------------------- New in V1.00: This is the first Aminet release New in V1.01: MemLog also records now the total amount of memory required by an application, and prints out how much memory was not released during its course. Also, MemLog now prints the currently allocated memory on CTRL-F. If SegTracker is installed, MemLog now defers the unloading of segments until either aborted or CTRL-F is pressed to allow SegTracker finding segment information of recently run programs. ----------------------------------------------------------------------------- What is the purpose of this utility: This utility helps to identify memory leaks in programs and the AmigaOs operating system. To this end, it logs all allocations made by a specific task or a specific ROM module, and upon exit, prints where the allocations have been made. If the SegTracker utility is installed as well, this allows the identification of the hunk and offset from where memory was allocated. This may then be used to find, within the source, the origin of the allocation, hopefully allowing to hunt down why the allocated memory was not released. Note that AmigaOs may pass memory from one task to another, i.e. this utility may report false positives of memory that is allocated by the supervised task, but is to be released by some other mechanism outside the original task, and that the Os also pools memory itself in some of its libraries - e.g. graphics and layers pool some of their structures. ----------------------------------------------------------------------------- Usage: Ideally, this program should be used together with SegTracker, and the "Avail" program from the system. To start logging, first install SegTracker, then run 1.SYS:> Avail Flush from the shell to release temporary memory. Next, run this utility. 1.SYS:> MemLog TASKNAME myprogram This will record all allocations made by a program "myprogram". The program name is either the name of the task, or the name of a shell program run as a shell process. Next, run in a second shell, or from the workbench, the program to debug: 2.SYS:> myprogram Use "myprogram" now as you would always do, e.g. click on its GUI, enter data, etc... then stop it. After quitting the program, flush temporary memory again: 2.SYS:> Avail Flush Close the second shell window, go now back to the first shell window, and abort "MemLog" with ^C (i.e. press Control + C). At this point, MemLog will print, on the shell, the memory segments that have not been released yet, but that have been allocated by your program, along with a stack traceback where the call came from, along with SegTracker information on the hunk and offset where the specific function call is within the program. Alternatively, "MemLog" may also be used to observe allocations from a specific ROM module only, by running it as such: 1.SYS:> MemLog MODULE dos.library This will log all allocations that come, one way or another, from the dos.library and functions within the dos.library, or, to trace allocations coming from a task, within a specific ROM module: 1.SYS:> MemLog TASK myprogram MODULE dos.library While the program to be observed is running, you may press ^F (Control + F) to get a print-out of the currently allocated memory blocks. ------------------------------------------------------------------------------ The THOR-Software Licence (v3, January 2nd 2021) This License applies to the computer programs known as the "MemLog" and its sources. The "Program", below, refers to such program. The "Archive" refers to the package of distribution, as prepared by the author of the Program, Thomas Richter. Each licensee is addressed as "you". The Program and the data in the archive are freely distributable under the restrictions stated below, but are also Copyright (c) Thomas Richter. Distribution of the Program, the Archive and the data in the Archive by a commercial organization without written permission from the author to any third party is prohibited if any payment is made in connection with such distribution, whether directly (as in payment for a copy of the Program) or indirectly (as in payment for some service related to the Program, or payment for some product or service that includes a copy of the Program "without charge"; these are only examples, and not an exhaustive enumeration of prohibited activities). However, the following methods of distribution involving payment shall not in and of themselves be a violation of this restriction: (i) Distributing the Program on a physical data carrier (e.g. CD-ROM, DVD, USB-Stick, Disk...) provided that: a) the Archive is reproduced entirely and verbatim on such data carrier, including especially this licence agreement; b) the data carrier is made available to the public for a nominal fee only, i.e. for a fee that covers the costs of the data carrier, and shipment of the data carrier; c) a data carrier with the Program installed is made available to the author for free except for shipment costs, and d) provided further that all information on said data carrier is redistributable for non-commercial purposes without charge. Redistribution of a modified version of the Archive, the Program or the contents of the Archive is prohibited in any way, by any organization, regardless whether commercial or non-commercial. Everything must be kept together, in original and unmodified form. Limitations. THE PROGRAM IS PROVIDED TO YOU "AS IS", WITHOUT WARRANTY. THERE IS NO WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 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. IF YOU DO NOT ACCEPT THIS LICENCE, YOU MUST DELETE THE PROGRAM, THE ARCHIVE AND ALL DATA OF THIS ARCHIVE FROM YOUR STORAGE SYSTEM. YOU ACCEPT THIS LICENCE BY USING OR REDISTRIBUTING THE PROGRAM. Thomas Richter ----------------------------------------------------------------------------- So long, Thomas (January 2021)