我使用GTest 1.7在Windows 7中的Visual Studio 2012中测试C ++代码。
我已经扩展了GTest,尝试使用_CrtMem...
方法进行简单的内存泄漏测试。 (来源:https://github.com/stbrenner/gtest_mem)
在大多数情况下,一切都很棒!但是我目前报告了一个44字节内存泄漏的情况,我认为这可能是误报,但我无法确定如何识别它。
我必须扩展GTest的代码是:
// ------------------------------------------------------------------------------------------------
#include <gtest/gtest.h>
// ------------------------------------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
// ------------------------------------------------------------------------------------------------
namespace testing
{
class MemoryLeakDetector : public EmptyTestEventListener
{
#ifdef _DEBUG
public:
virtual void OnTestStart(const TestInfo&)
{
_CrtMemCheckpoint(&memState_);
}
virtual void OnTestEnd(const TestInfo& test_info)
{
if(test_info.result()->Passed())
{
_CrtMemState stateNow, stateDiff;
_CrtMemCheckpoint(&stateNow);
int diffResult = _CrtMemDifference(&stateDiff, &memState_, &stateNow);
if (diffResult)
{
FAIL() << "Memory leak of " << stateDiff.lSizes[1] << " byte(s) detected.";
}
}
}
private:
_CrtMemState memState_;
#endif // _DEBUG
};
}
// ------------------------------------------------------------------------------------------------
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
testing::UnitTest::GetInstance()->listeners().Append(new testing::MemoryLeakDetector());
RUN_ALL_TESTS();
system("pause");
return 0;
}
// ------------------------------------------------------------------------------------------------
当我发现泄漏时,我正在寻找的是一种倾倒显然泄露的记忆区域的方法,以便我可以尝试识别它来自哪里。
我曾希望添加_CrtDumpMemoryLeaks();
(在FAIL()之前或之后)会有所帮助,但这并不能输出额外的任何内容。