Malloc 检测
Malloc 检测为 malloc 子系统提供了一个可选的错误报告和检测扩展。 将报告有关发生在 malloc 环境中的错误的信息并可执行操作(如果指定)。
Malloc 检测可分成三种不同的能力:
- 检测错误
- 使用 stderr 报告错误
- 使用应用程序定义的函数报告错误
检测错误
malloc 子系统中的一些错误容易检测。 例如释放非有效堆地址指针的错误在释放的代码路径上被同步检测到。 然而,异步事件造成的错误(例如堆损坏)的查找会困难得多。 Malloc Detect 的
check_arena 选项旨在同步检查此类型的损坏。 在对 malloc 子系统 API 的每个调用上,执行一个内部数据结构的检查。 如果发现了损坏,那么将它报告给应用程序。 这提供了另一个时点,用它调试这些难题。 可以通过设置 MALLOCDEBUG 环境变量来启用 check_arena 选项,如下所示:MALLOCDEBUG=checkarena使用标准错误来报告错误
报告 malloc 子系统中的错误的正常方式是通过返回值和 errno 环境变量。 Malloc Detect 的
verbose 选项允许将这些错误打印到应用程序的标准错误流。 这为报告 malloc 中的错误提供了一个更加可视、更加详细的方式。 通过如下设置 MALLOCDEBUG 环境变量,可以启用 verbose 选项:MALLOCDEBUG=verbose|使用应用程序定义的函数来报告错误
Malloc 检测还允许用户提供 malloc 子系统在遇到错误时调用的函数。 Malloc 报告将调用应用程序提供的函数,等待返回,然后照常返回。 此工具在允许程序继续之前允许应用程序执行请求的任何必要调试任务。 要启用此工具,应用程序必须将全局函数指针 malloc_err_function 的值设为等于应用程序的错误例程的值。 例如:
extern void (*malloc_err_function)(int, ...)
malloc_err_function = &application_malloc_err_hdl限制
Malloc 检测调试功能与以下 malloc 策略和选项相容: