当前位置:  开发笔记 > 运维 > 正文

如何强制中止"glibc detect***free():无效指针"

如何解决《如何强制中止"glibcdetect***free():无效指针"》经验,为你挑选了2个好方法。

在Linux环境中,当获取"glibc***free():无效指针"错误时,如何识别导致它的代码行?

有没有办法强迫中止?我记得有一个ENV var可以控制它吗?

如何在gdb中为glibc错误设置断点?



1> DGentry..:

我相信如果你setenv MALLOC_CHECK_为2,glibc会abort()在检测到"free():invalid pointer"错误时调用.请注意环境变量名称中的尾随下划线.

如果MALLOC_CHECK_是1 glibc将打印"free():无效指针"(和其他错误类似的printfs).如果MALLOC_CHECK_为0,glibc将默默地忽略此类错误并返回.如果MALLOC_CHECK_是3 glibc将打印消息然后调用abort().即它是一个位掩码.

您也可以mallopt(M_CHECK_ACTION, arg)使用0-3的参数调用,并获得与之相同的结果MALLOC_CHECK_.

由于您看到"free():invalid pointer"消息,我认为您必须已经设置MALLOC_CHECK_或调用mallopt().默认情况下,glibc不会打印这些消息.

至于如何调试它,安装处理程序SIGABRT可能是最好的方法.您可以在处理程序中设置断点或故意触发核心转储.



2> dicroce..:

我建议你得到valgrind:

valgrind --tool = memcheck --leak-check = full ./a.out


您将有多次运行,因此请根据当前时间获取valgrind输出到文件名.valgrind - tool = memcheck --leak-check = full --log-file =`date +%s`-vg.txt ./a.out
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有