gpt4 book ai didi

c++ - 查找仅在性能测试下发生的堆损坏的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 12:43:26 25 4
gpt4 key购买 nike

我工作的软件(用 C++ 编写)目前存在堆损坏问题。当登录到该框的用户数量达到某个阈值时,我们的 perf 测试团队不断遇到 WER 错误,但他们给我的转储只显示无辜区域的损坏(例如,当 std::string 释放它的底层内存时) .

我尝试过使用 Appverifier,这确实引发了一些我现在已经解决的问题。然而,我现在的情况是,测试人员可以使用 Appverifier 尽可能多地加载机器并进行干净的运行,但在没有 Appverifier 的情况下运行时仍然会出现堆损坏(我猜是因为他们可以在没有 Appverifier 的情况下获得更多用户等)。这意味着我无法获得实际显示问题的转储。

有没有人对我可以使用的有用技巧或技术有任何其他想法?我在没有 appverifier 的情况下对堆损坏转储进行了尽可能多的分析,但我看不到任何共同的主题。没有线程在崩溃的同时做任何有趣的事情,崩溃的线程是无辜的,这让我认为损坏发生在一段时间之前。

最佳答案

最好的工具是结合 gFlags 的 Appverifier,但还有许多其他解决方案可能会有所帮助。

例如,您可以使用以下代码指定每 16 次 malloc、realloc、free 和 _msize 操作进行一次堆检查:

#include <crtdbg.h>
int main( )
{
int tmp;

// Get the current bits
tmp = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);

// Clear the upper 16 bits and OR in the desired freqency
tmp = (tmp & 0x0000FFFF) | _CRTDBG_CHECK_EVERY_16_DF;

// Set the new bits
_CrtSetDbgFlag(tmp);
}

关于c++ - 查找仅在性能测试下发生的堆损坏的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com