linux 调试

本文介绍了在Linux环境下,如何利用`ulimit -c unlimited`设置生成core文件,通过`gdb`进行调试。针对一个特定的线程间内存分配导致的崩溃问题,探讨了使用`__malloc_hook`和`__free_hook`进行跟踪malloc和free的方法,以及尝试通过backtrace获取调用堆栈。当malloc的cookie值异常时,使用`awatch`在gdb中找到问题源头。同时分享了寻找类型定义的方法,如查找`time_t`的定义,可以使用`gcc -E xxx.c | grep time_t`命令进行预处理阶段的搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ulimit -c unlimited 崩溃生成core文件

gdb -c corefile ./excute.


记一个bug:一个线程通过malloc分配内存,将该内存放入到list中,另一个线程读取这个list,总是在特定的次数后发生free崩溃,提示:invalid pointer.

解决思路:跟踪 malloc 和 free.使用了__malloc_hook.__free_hook.https://github.com/GisKook/codeset/blob/master/civilmanager_access/test/mallochook_test.c

同事使用了backtrace。打印调用堆栈。没有发现有价值的东西,想到一般malloc时都在生成的pointer之前放置一些大小信息,跟踪过程中发现出问题时malloc那个cookie都成为了0.所以推断是被其他线程覆盖了,gdb使用awatch命令找到了源头。


如何寻找类型的定义:如 time_t gcc -E xxx.c | grep time_t (Stop after the preprocessing stage; do not run the compiler proper.  The output is in the form of preprocessed source code, which is sent to the standard output. Input files which don’t require preprocessing are ignored.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值