我正在尝试使用 dmalloc 版本 5.5.2 和 glibc 2.17。
dmalloc 中的链接总是会导致段错误。
调试时,我发现 dmalloc 在要格式化有用的调试消息时会调用 vsnprintf(...) 。不幸的是 vsnprintf(..) 本身调用了 free(),所以分段错误的原因是递归。free() 调用 vsnprintf(),vsnprintf() 调用 free() 等等,直到我们用一个巨大的堆栈跟踪进行段错误。
可以通过取消定义 HAVE_VSNPRINTF 和 HAVE_VPRINTF 来快速解决此问题,但是调试消息缺少关键信息。
我已经通过使用不分配内存的古老实现 vsnprintf(...) 破解了我自己的解决方案,但很难相信那里还没有一个好的解决方案。
有没有一种标准的方法可以用 dmalloc 解决这个问题?