MALLOC_CHECK

来源:互联网 发布:官路淘宝 元宝 小说 编辑:程序博客网 时间:2024/06/05 16:04

不得不说,在Linux的编程的下,我要走的路还有很长很长,前段时间遇到的这个问题则是最能说明该问题了。
一个后台服务进程,在启动时,一直停留在某个阶段,根本无法正常的开展业务,换句话说,进程其实没有启动成功,而换到另一个环境则没有这个问题。即没有coredump文件,也没有log可以看,只能利用GDB进行调试,可是发现只是提示了在malloc分配内存时出现了导致程序无法正常启动,可是具体是那一次的malloc分配导致的问题却无从下手。
而出现malloc问题的是在一个静态库里,开始怀疑是不是静态库编译的时候的c库与进程编译时连接的c库不一致,但在让二者在同一个环境下进行编译,问题依然出现。无奈,只能上网寻求帮助,毕竟你所遇到的98%的问题别人都遇到过。
在看了网上的资料后,有人提到了在Linux下提供的MALLOC_CHECK可以检测malloc和free的问题,先将这么配置的具体表示贴出来:

MALLOC_CHECK_=0, 和没设置一样,将忽略这些错误
MALLOC_CHECK_=1, 将打印一个错误告警
MALLOC_CHECK_=2, 程序将收到SIGABRT信号退出

在将环境该环境变量设为2后,在运行程序,程序段错误,出现coredump文件。而这也正是我想要,在对照代码后发现,因为free函数放错了地方,导致同一块内存释放了两次,而至于别的环境没出现这个问题,是因为其他的进程需要的配置文件是正确的,没到导致free两次,所以没出现。
在修改之后,问题的确得到了解决。而这整个问题的解决过程也验证了网上的那句话:Google+stackoverflow可以让一个程序员变成超级程序员,当然前提是,你要能破墙且英语马马虎虎。。。。

0 0