我用C ++编写了一个内存跟踪系统,使用Detours修补各种内存分配功能。当我收到malloc的调用以及malloc时,我也存储了堆栈跟踪(所以我可以指出泄漏)。
获得准确堆栈跟踪的唯一可靠方法是使用StackWalk64(我尝试了RtlCaptureStackBackTrace,这只能设法捕获非常简单的堆栈)。
然而,这是我的问题,StackWalk64调用malloc,后者又调用StackWalk64并导致堆栈溢出。现在我可以有一个处理递归调用的标志,但这不适用于多个线程
我想知道是否有人可以解决这个问题。
由于 Rich Carless
答案 0 :(得分:1)
你可以在malloc实现中使用线程局部标志来阻止对StackWalk64的递归调用吗?
答案 1 :(得分:0)
我们曾遇到过类似的问题并通过将调试打印代码预先链接到另一个(修改过的)malloc版本来解决它,该版本取自glibc并稍加修改以在预分配缓冲区上运行(我们希望避免任何内存活动)我们的案例中的操作系统)。 我不知道你的系统中静态预链接有多难。