我工作的软件(使用C++编写)目前存在堆损坏问题。我们的性能测试团队在登录到盒子的用户数量达到某个阈值时仍然会收到WER错误,但他们给我的转储只是在不明显的区域显示损坏(例如,当std :: string释放它的基础内存时) 。查找只发生在性能测试下的堆损坏的最佳方式是什么?
我试过使用AppApprifier,这确实引发了一些我现在修复的问题。然而,我现在处于这样一种情况,即测试人员可以尽可能多地使用AppApprifier加载机器,并且运行干净,但在没有AppApprifier的情况下运行时仍然会发生堆损坏(我想因为他们可以在没有其他用户的情况下获得更多用户)。这意味着我一直无法获得实际显示问题的转储。
有没有人有任何其他的想法,我可以使用有用的技术或技术?我已经做了尽可能多的分析,因为我可以在堆腐败转储没有appverifier,但我看不到任何常见的主题。没有任何线程在崩溃的同时做任何事情,而且崩溃的线程是无辜的,这使我认为腐败发生在前一段时间。
任何机会,你的代码是否可移植到* nix上?如果是这样,启动'valgrind'(或在Windows上找到类似的工具):通常第一个抱怨“无效读取”或“无效写入”是一个很好的暗示,因为真正的错误在哪里。 – ereOn
啊,只要它是:-)我以前用过valgrind,它是一个很好的工具。 Appverifier通常也很方便,但在这种情况下,它并不适用于我:-( – Benj
在另一个(有点类似)的问题上,我建议将电子围栏移植到Windows上,它会在无数内存错误中故意对段进行故障排序,但我很不确定http://code.google.com/p/electric-fence-win32/ –