如何在GNU C中使用mcheck进行堆一致性检查?
我试图了解堆一致性检查在GNU C库中的工作原理。 我指的是http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-Consistency-Checking
这是我编写的示例程序。 我按照手册中的建议,如果我在gdb中运行并调用mcheck(0)
我将调用我的自定义abortfn
。 但它没有被召集。
我在这里想念的是什么?
包括必要的标题。
void *abortfn(enum mcheck_status status) { switch(status) { case MCHECK_DISABLED: printf("MEMCHECK DISABLED\n"); break; default: printf("MEMCHECK ENABLED\n"); } } int main() { printf("This is mcheck testing code\n"); int *a = (int *) malloc(sizeof(int)); *a = 10; printf("A: %d\n", *a); free(a); return 0; }
今天,编译所有警告和调试信息( gcc -Wall -Wextra -g
)然后使用valgrind更方便。
但是,您链接到的文档说:
一旦你用malloc分配任何东西就开始分配检查为时已晚
所以开始你的main
作为
int main() { mcheck(abortfn);
但是,您的abortfn
应返回void
因此将其编码为:
void abortfn(enum mcheck_status status) { switch(status) { case MCHECK_DISABLED: printf("MEMCHECK DISABLED\n"); break; default: printf("MEMCHECK ENABLED\n"); } }