greenplumn CMiniDumperTest 源码
greenplumn CMiniDumperTest 代码
文件路径:/src/backend/gporca/libgpos/server/src/unittest/gpos/error/CMiniDumperTest.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CMiniDumperTest.cpp
//
// @doc:
// Tests for minidump handler
//---------------------------------------------------------------------------
#include "unittest/gpos/error/CMiniDumperTest.h"
#include "gpos/base.h"
#include "gpos/common/clibwrapper.h"
#include "gpos/error/CErrorContext.h"
#include "gpos/io/COstreamString.h"
#include "gpos/memory/CAutoMemoryPool.h"
#include "gpos/string/CWStringDynamic.h"
#include "gpos/string/CWStringStatic.h"
#include "gpos/task/CAutoSuspendAbort.h"
#include "gpos/task/CAutoTaskProxy.h"
#include "gpos/test/CUnittest.h"
using namespace gpos;
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::EresUnittest
//
// @doc:
// Function for testing minidump handler
//
//---------------------------------------------------------------------------
GPOS_RESULT
CMiniDumperTest::EresUnittest()
{
CUnittest rgut[] = {
GPOS_UNITTEST_FUNC(CMiniDumperTest::EresUnittest_Basic)};
return CUnittest::EresExecute(rgut, GPOS_ARRAY_SIZE(rgut));
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::EresUnittest_Basic
//
// @doc:
// Basic test for minidump handler
//
//---------------------------------------------------------------------------
GPOS_RESULT
CMiniDumperTest::EresUnittest_Basic()
{
CAutoMemoryPool amp;
CMemoryPool *mp = amp.Pmp();
CMiniDumperStream mdrs;
CWStringDynamic wstrMinidump(mp);
COstreamString oss(&wstrMinidump);
mdrs.Init(&oss);
GPOS_TRY
{
(void) PvRaise(nullptr);
}
GPOS_CATCH_EX(ex)
{
mdrs.Finalize();
GPOS_RESET_EX;
GPOS_TRACE(wstrMinidump.GetBuffer());
}
GPOS_CATCH_END;
return GPOS_OK;
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::PvRaise
//
// @doc:
// Function raising an exception
//
//---------------------------------------------------------------------------
void *
CMiniDumperTest::PvRaise(void * // pv
)
{
// register stack serializer with error context
CSerializableStack ss;
clib::USleep(1000);
// raise exception to trigger minidump
GPOS_OOM_CHECK(nullptr);
return nullptr;
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CMiniDumperStream::CMiniDumperStream
//
// @doc:
// Ctor
//
//---------------------------------------------------------------------------
CMiniDumperTest::CMiniDumperStream::CMiniDumperStream() : CMiniDumper()
{
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CMiniDumperStream::~CMiniDumperStream
//
// @doc:
// Dtor
//
//---------------------------------------------------------------------------
CMiniDumperTest::CMiniDumperStream::~CMiniDumperStream() = default;
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CMiniDumperStream::UlSerializeHeader
//
// @doc:
// Serialize minidump header
//
//---------------------------------------------------------------------------
void
CMiniDumperTest::CMiniDumperStream::SerializeHeader()
{
*m_oos << "\n<MINIDUMP_TEST>\n";
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CMiniDumperStream::UlSerializeFooter
//
// @doc:
// Serialize minidump footer
//
//---------------------------------------------------------------------------
void
CMiniDumperTest::CMiniDumperStream::SerializeFooter()
{
*m_oos << "</MINIDUMP_TEST>\n";
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CMiniDumperStream::SerializeEntryHeader
//
// @doc:
// Serialize entry header
//
//---------------------------------------------------------------------------
void
CMiniDumperTest::CMiniDumperStream::SerializeEntryHeader()
{
WCHAR wszBuffer[GPOS_MINIDUMP_BUF_SIZE];
CWStringStatic wstr(wszBuffer, GPOS_ARRAY_SIZE(wszBuffer));
wstr.AppendFormat(GPOS_WSZ_LIT("<THREAD ID=%d>\n"), 0);
*m_oos << wstr.GetBuffer();
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CMiniDumperStream::SerializeEntryFooter
//
// @doc:
// Serialize entry footer
//
//---------------------------------------------------------------------------
void
CMiniDumperTest::CMiniDumperStream::SerializeEntryFooter()
{
*m_oos << "</THREAD>\n";
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CSerializableStack::CSerializableStack
//
// @doc:
// Ctor
//
//---------------------------------------------------------------------------
CMiniDumperTest::CSerializableStack::CSerializableStack() : CSerializable()
{
}
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CSerializableStack::~CSerializableStack
//
// @doc:
// Dtor
//
//---------------------------------------------------------------------------
CMiniDumperTest::CSerializableStack::~CSerializableStack() = default;
//---------------------------------------------------------------------------
// @function:
// CMiniDumperTest::CSerializableStack::Serialize
//
// @doc:
// Serialize object to passed stream
//
//---------------------------------------------------------------------------
void
CMiniDumperTest::CSerializableStack::Serialize(COstream &oos)
{
WCHAR wszStackBuffer[GPOS_MINIDUMP_BUF_SIZE];
CWStringStatic wstr(wszStackBuffer, GPOS_ARRAY_SIZE(wszStackBuffer));
wstr.AppendFormat(GPOS_WSZ_LIT("<STACK_TRACE>\n"));
CErrorContext *perrctxt = CTask::Self()->ConvertErrCtxt();
perrctxt->GetStackDescriptor()->AppendTrace(&wstr);
wstr.AppendFormat(GPOS_WSZ_LIT("</STACK_TRACE>\n"));
oos << wstr.GetBuffer();
}
// EOF
相关信息
相关文章
greenplumn CErrorHandlerTest 源码
greenplumn CMessageRepositoryTest 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦