⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debug.c

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 C
字号:
#include <stdio.h>#include "xlisp.h"#include "sound.h"#include "falloc.h"#include "debug.h"/* The DEBUG_MEM related routines are: *    dbg_mem_allocated: called when memory is allocated *    dbg_mem_freed: called when memory is freed *    dbg_mem_released: called when memory is released *//* CHANGE LOG * -------------------------------------------------------------------- * 28Apr03  dm  changes for portability and fix compiler warnings */#if DEBUG_MEMtypedef struct {    long seq_num;    char *who;} dbg_mem_node, *dbg_mem_type;static long dbg_mem_last_seq_num = 0;long dbg_mem_seq_num = 0;long dbg_mem_trace = 0;void dbg_mem_pause(void){    stdputstr("RETURN to continue: ");    getchar();}void dbg_mem_allocated(void *p, char *who){    dbg_mem_type info = (dbg_mem_type) p;    if (p == (void *) dbg_mem_trace) {        nyquist_printf("dbg_mem_allocated(%p, %s)\n", p, who);    }    info--; /* info is stored (hidden) BEFORE the data */    dbg_mem_last_seq_num++;    if (dbg_mem_last_seq_num == dbg_mem_seq_num) {        nyquist_printf("dbg_mem_allocated: "                       "%s just allocated %p as number %d\n",                       who, p, (int)dbg_mem_last_seq_num);        dbg_mem_pause();    }    info->seq_num = dbg_mem_last_seq_num;    info->who = who;}void dbg_mem_freed(void *p, char *who){    dbg_mem_type info = (dbg_mem_type) p;    if (p == (void *) dbg_mem_trace) {        nyquist_printf("dbg_mem_freed(%p, %s)\n", p, who);    }    info--; /* info is stored (hidden) BEFORE the data */    if (!info->who) {        nyquist_printf("MEMORY %p FREED TWICE!, "                       "second time by: %s, seq_num %d\n",                       p, who, (int)info->seq_num);        fflush(stdout);        dbg_mem_pause();    }    if (info->seq_num == dbg_mem_seq_num) {        nyquist_printf("dbg_mem_freed: %s freeing %p, number %d\n",                       who, p, (int)dbg_mem_seq_num);        dbg_mem_pause();    }    info->who = NULL;}void dbg_mem_released(void *p, char *who){    dbg_mem_type info = (dbg_mem_type) p;    if (p == (void *) dbg_mem_trace) {        nyquist_printf("dbg_mem_released(%p, %s)\n", p, who);    }    info--; /* info is stored (hidden) BEFORE the data */    if (!info->who) {        nyquist_printf("MEMORY %p RELEASED BUT NOT ALLOCATED!, "                       "released by: %s, seq_num %d\n",                       p, who, (int)info->seq_num);        fflush(stdout);        dbg_mem_pause();    }    if (info->seq_num == dbg_mem_seq_num) {       nyquist_printf("dbg_mem_released: %s releasing %p, number %d\n",                      who, p, (int)dbg_mem_seq_num);        dbg_mem_pause();    }}void dbg_mem_check(void *p, char *who){    dbg_mem_type info = (dbg_mem_type) p;    if (!info) {        nyquist_printf("DBG_MEM_CHECK (from %s): NULL POINTER!", who);         fflush(stdout);        dbg_mem_pause();    }    info--; /* info is stored (hidden) BEFORE the data */    if (!info->who) {       nyquist_printf("DBG_MEM_CHECK (from %s): %p IS FREE!, seq_num %d\n",                       who, p, (int)info->seq_num);       fflush(stdout);       dbg_mem_pause();    }}void dbg_mem_print(char *msg, void *p){    dbg_mem_type info = (dbg_mem_type) p;    stdputstr(msg);    if (!info) {        stdputstr(" NULL POINTER");    } else {        info--; /* info is stored (hidden) BEFORE the data */        if (!info->who) {            nyquist_printf(" %p IS FREE!, ", p);        } else {            nyquist_printf(" %p allocated by %s, ", p, info->who);        }        nyquist_printf("seq_num %d\n", (int)info->seq_num);    }}#endifvoid print_sound_type(sound_type s){    snd_list_type list;    int blockcount;    nyquist_printf("sound_type: 0x%p\n", s);    nyquist_printf("\tt0: %f\n", s->t0);    nyquist_printf("\tsr: %f\n", s->sr);    nyquist_printf("\tcurrent: %d\n", (int)s->current);    nyquist_printf("\tlogical_stop_cnt: %d\n", (int)s->logical_stop_cnt);    nyquist_printf("\tlist: 0x%p\n", s->list);    nyquist_printf("\tscale: %f\n", s->scale);    list = s->list;    blockcount = 0;    nyquist_printf("\t(0x%p:0x%p)->", list, list->block);    while (list->block) {        list = list->u.next;        if (blockcount < 5) {            nyquist_printf("(0x%p:0x%p)->", list, list->block);        }        else if (blockcount == 5) {            stdputstr(" ... ");            break;        }        blockcount++;    }    stdputstr("\n");}void print_snd_list_type(snd_list_type list){    nyquist_printf("%p: [%p[%d], %p] refcnt %d ls %d", list, list->block,            list->block_len, list->u.next,             list->refcnt, list->logically_stopped);}void print_sample_block_type(char *label,                             sample_block_type sampblock,                             int len){    int j;    sample_block_values_type samp;    samp = sampblock->samples;    nyquist_printf("%s: [%p(ref %d): len %d]: =========>>",                   label, sampblock, (int)sampblock->refcnt, len);    for (j = 0; j < len; j++) {        nyquist_printf("%6g ", *samp++);    }    stdputstr("\n");}/*******/snd_susp_type susp_to_watch = NULL;void watch_susp(snd_susp_type s){    if (!susp_to_watch) {        susp_to_watch = s;        nyquist_printf("watching susp %p\n", s);    }}sound_type sound_to_watch = NULL;void watch_sound(sound_type s){    if (!sound_to_watch) {        sound_to_watch = s;        nyquist_printf("watching sound %p\n", s);    }}snd_list_type snd_list_to_watch = NULL;void watch_snd_list(snd_list_type s){    snd_list_to_watch = s;    nyquist_printf("watching snd_list %p\n", s);}void snd_list_debug(snd_list_type snd_list, char *s){    if (snd_list == snd_list_to_watch) {        nyquist_printf("%s%s\n", s,               " appended to snd_list_to_watch.");        watch_snd_list(snd_list->u.next);    }}void snd_list_report(snd_list_type snd_list, char *s){    if (snd_list == snd_list_to_watch) {        nyquist_printf("%s: fetching block for watched snd_list.\n",               s);    }}#ifdef IGNOREvoid test_it(){    if (susp_to_watch && susp_to_watch->keep_fetch)         stdputstr("WE FOUND A SERIOUS PROBLEM\n");}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -