1.2b14: More malloc tracing tools

From: Henrik Nordstrom <hno@dont-contact.us>
Date: Sun, 08 Feb 1998 03:49:30 +0100

This is a multi-part message in MIME format.

--------------7804209E2AF49C5B43278698
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

This patch changes -m (without argument) to turn on malloc tracing (if
configured).

Other ways to control the malloc tracing, from inside a debugger:

1. Set xmalloc_trace to true

2. Call malloc_file_name(ptr) or malloc_line_number(ptr) to find out
where some memory was allocated.

To make 2 somewhat easier to use, I have this gdb macro:

define malloc_info
  printf "Allocation %d from %s:%d size %d\n", \
      malloc_number($arg0), malloc_file_name($arg0), \
      malloc_line_number($arg0), mallocblksize($arg0)
end

--------------7804209E2AF49C5B43278698
Content-Type: text/plain; charset=us-ascii; name="squid-1.2.beta14.malloc_trace_option.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="squid-1.2.beta14.malloc_trace_option.patch"

Index: squid/include/util.h
diff -u squid/include/util.h:1.1.1.6 squid/include/util.h:1.1.1.6.2.1
--- squid/include/util.h:1.1.1.6 Sun Feb 8 02:24:43 1998
+++ squid/include/util.h Sun Feb 8 02:40:49 1998
@@ -164,6 +164,7 @@
 extern int xmalloc_line;
 extern char *xmalloc_file;
 extern char *xmalloc_func;
+extern int xmalloc_trace;
 #endif
 
 typedef struct in_addr SIA;
Index: squid/lib/util.c
diff -u squid/lib/util.c:1.1.1.7 squid/lib/util.c:1.1.1.7.2.1
--- squid/lib/util.c:1.1.1.7 Sun Feb 8 02:24:45 1998
+++ squid/lib/util.c Sun Feb 8 02:40:54 1998
@@ -179,6 +179,7 @@
 int xmalloc_line=0;
 char *xmalloc_func="";
 static int xmalloc_count=0;
+int xmalloc_trace=0; /* Enable with -m option */
 #undef xmalloc
 #undef xfree
 #undef xxfree
@@ -320,7 +321,7 @@
     return 0;
 }
 static void
-xmalloc_trace(void *p, int sign)
+xmalloc_show_trace(void *p, int sign)
 {
     int statMemoryAccounted();
     static size_t last_total = 0, last_accounted = 0, last_mallinfo = 0;
@@ -332,16 +333,18 @@
     sz = mallocblksize(p) * sign;
     total += sz;
     xmalloc_count += sign>0;
- fprintf(stderr, "%c%8p size=%5d/%d acc=%5d/%d mallinfo=%5d/%d %s:%d %s",
- sign>0 ? '+':'-',p,
- (int) total - last_total, (int) total,
- (int) accounted - last_accounted, (int) accounted,
- (int) mi - last_mallinfo, (int) mi,
- xmalloc_file, xmalloc_line, xmalloc_func);
- if (sign<0)
- fprintf(stderr," (%d %s:%d)\n",malloc_number(p),malloc_file_name(p),malloc_line_number(p));
- else
- fprintf(stderr," %d\n",xmalloc_count);
+ if (xmalloc_trace) {
+ fprintf(stderr, "%c%8p size=%5d/%d acc=%5d/%d mallinfo=%5d/%d %s:%d %s",
+ sign>0 ? '+':'-',p,
+ (int) total - last_total, (int) total,
+ (int) accounted - last_accounted, (int) accounted,
+ (int) mi - last_mallinfo, (int) mi,
+ xmalloc_file, xmalloc_line, xmalloc_func);
+ if (sign<0)
+ fprintf(stderr," (%d %s:%d)\n",malloc_number(p),malloc_file_name(p),malloc_line_number(p));
+ else
+ fprintf(stderr," %d\n",xmalloc_count);
+ }
     last_total = total;
     last_accounted = accounted;
     last_mallinfo = mi;
@@ -377,7 +380,7 @@
     malloc_stat(sz);
 #endif
 #if XMALLOC_TRACE
- xmalloc_trace(p, 1);
+ xmalloc_show_trace(p, 1);
 #endif
     return (p);
 }
@@ -389,7 +392,7 @@
 xfree(void *s)
 {
 #if XMALLOC_TRACE
- xmalloc_trace(s, -1);
+ xmalloc_show_trace(s, -1);
 #endif
 #if XMALLOC_DEBUG
     check_free(s);
@@ -403,7 +406,7 @@
 xxfree(void *s)
 {
 #if XMALLOC_TRACE
- xmalloc_trace(s, -1);
+ xmalloc_show_trace(s, -1);
 #endif
 #if XMALLOC_DEBUG
     check_free(s);
@@ -421,7 +424,7 @@
     static void *p;
 
 #if XMALLOC_TRACE
- xmalloc_trace(s, -1);
+ xmalloc_show_trace(s, -1);
 #endif
 
     if (sz < 1)
@@ -443,7 +446,7 @@
     malloc_stat(sz);
 #endif
 #if XMALLOC_TRACE
- xmalloc_trace(p, 1);
+ xmalloc_show_trace(p, 1);
 #endif
     return (p);
 }
@@ -478,7 +481,7 @@
     malloc_stat(sz);
 #endif
 #if XMALLOC_TRACE
- xmalloc_trace(p, 1);
+ xmalloc_show_trace(p, 1);
 #endif
     return (p);
 }
Index: squid/src/main.c
diff -u squid/src/main.c:1.1.1.11 squid/src/main.c:1.1.1.11.2.1
--- squid/src/main.c:1.1.1.11 Sun Feb 8 02:24:54 1998
+++ squid/src/main.c Sun Feb 8 02:40:54 1998
@@ -167,7 +167,7 @@
     extern char *optarg;
     int c;
 
- while ((c = getopt(argc, argv, "CDFNRVYXa:df:hk:m:su:vz?")) != -1) {
+ while ((c = getopt(argc, argv, "CDFNRVYXa:df:hk:m::su:vz?")) != -1) {
         switch (c) {
         case 'C':
             opt_catch_signals = 0;
@@ -228,14 +228,22 @@
                 usage();
             break;
         case 'm':
+ if (optarg) {
 #if MALLOC_DBG
- malloc_debug_level = atoi(optarg);
- /* NOTREACHED */
- break;
+ malloc_debug_level = atoi(optarg);
+ /* NOTREACHED */
+ break;
+#else
+ fatal("Need to add -DMALLOC_DBG when compiling to use -mX option");
+ /* NOTREACHED */
+#endif
+ } else {
+#if XMALLOC_TRACE
+ xmalloc_trace=!xmalloc_trace;
 #else
- fatal("Need to add -DMALLOC_DBG when compiling to use -m option");
- /* NOTREACHED */
+ fatal("Need to configure --enable-xmalloc-debug-trace to use -m option");
 #endif
+ }
         case 's':
             opt_syslog_enable = 1;
             break;

--------------7804209E2AF49C5B43278698--
Received on Tue Jul 29 2003 - 13:15:46 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:11:42 MST