伙计们,能不能请你推荐一个工具,用于发现存腐败对生产多线程服务器的建立与c++和工作在linux x86_64?我目前面临着以下问题:每隔几个小时我的服务器崩溃的一个出现段错误和核心倾倒显示了这一错误发生在malloc/calloc这绝对是一个标志的记忆被损坏的地方。

实际上我已经尝试了一些工具没有太多的幸运。这是我迄今的经验:

  • 才是一个巨大的(我甚至可以说最好的)工具,但它减慢的服务器太多,使其无法用于生产。我试图在一个阶段的服务器,并且它确实帮助我找到一些存有关的问题,但即使在固定之后我们仍然崩溃,对生产服务器。我跑我的舞台服务器下才几个小时,但仍然无法发现任何严重的错误。

  • ElectricFence说是一个真正的存猪但我甚至都不能让它工作正常。它segfaults几乎立即上一阶段的服务器在随机的怪的地方才没有出现任何问题。也许ElectricFence不支持穿好吗?..我不知道。

  • 国家杜马-同样的故事ElectricFence但甚至更糟。同时EF产生的核心垃圾场与可读的跟踪国家杜马表示我只有"?????"(是的服务器是建立与-g的标志定)

  • dmalloc-我配置的服务器使用它,而不是标准malloc程序,但是它挂后几分钟。附库的过程揭示了它的地方挂在dmalloc:(

我渐渐地越来越疯狂,根本不知道接下来要做什么。我有以下的工具,可以尝试:mtrace,mpatrol但也许有人有一个更好的主意吗?

我非常赞赏任何帮助在这个问题。

更新: 我设法找到源的的错误。但是我发现它在舞台服务器不是生产一种用helgrind/DRD/赞-有一个datarace之间的几个线程,这导致了存储器中的腐败。关键是要使用适当的才禁止由于这些工具显示,太多的误报。我还真的不知道这怎么可以发现生产服务器上没有任何重大减速...

有帮助吗?

解决方案 3

伙计们,我设法找到源的的错误。但是我发现它在该阶段的服务器使用helgrind/DRD/赞-有一个datarace之间的几个线程,这导致了存储器中的腐败。关键是要使用 正确的 才禁止由于这些工具显示,太多的误报。我还真的不知道这怎么可以发现生产服务器上没有任何重大减速...

其他提示

是的,C/C++存腐败问题是艰难的。我也用几次才,有时也揭示了问题并且有时不是。

同时,检查才出不倾向于忽略其结果过快。有时后一个相当的时间,你会看到,才给了你条线索上的第一位,但您忽略它。

另一个建议是比较的代码的更改以前已知的稳定释放。这不是一个问题,如果使用某种源的版本控制系统(例如svn).检查所有的存储器有关的功能(例如:memcpy,memset,sprintf,新、删除或删除[]).

编译程序与海湾合作委员会4.1和fstack-保护-的所有开关。如果存损坏所引起的堆砸这个应该能够检测到它。你可能需要发挥与一些的附加参数的SSP。

你有没有试过 -fmudflap?(滚了几条线看到的选择可用)。

你可以尝试IBM净化,但我恐怕这不是开放源代码..

谷歌Perftools---这是开放源---可能的帮助,请参阅 堆检查 文件。

试试这个:http://www.hexco.de/rmdebug/ 我用它广泛、具有低的影响在性能(它主要影响的内存数量),但分配算法是一样的。它总是证明足以找到任何分配的错误。你的程序将崩溃,因为一旦发生错误的,它将有一个详细的记录。

我不确定如果它会抓到你的特定错误,但是 MALLOC_CHECK_ 环境变量(malloc 人页)事实证明额外的检查,在默认Linux malloc 执行情况,并且通常没有明显的运行成本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top