greenplumn CMemoryVisitorPrint 源码
greenplumn CMemoryVisitorPrint 代码
文件路径:/src/backend/gporca/libgpos/src/memory/CMemoryVisitorPrint.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2009-2010 Greenplum Inc.
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CMemoryVisitorPrint.cpp
//
// @doc:
// Implementation of memory object visitor for printing debug information
// for all allocated objects inside a memory pool.
//
// @owner:
//
// @test:
//
//---------------------------------------------------------------------------
#include "gpos/memory/CMemoryVisitorPrint.h"
#include "gpos/assert.h"
#include "gpos/common/CStackDescriptor.h"
#include "gpos/string/CWStringStatic.h"
#include "gpos/task/ITask.h"
#include "gpos/types.h"
#include "gpos/utils.h"
using namespace gpos;
//---------------------------------------------------------------------------
// @function:
// CMemoryVisitorPrint::CMemoryVisitorPrint
//
// @doc:
// Ctor.
//
//---------------------------------------------------------------------------
CMemoryVisitorPrint::CMemoryVisitorPrint(IOstream &os) : m_visits(0), m_os(os)
{
}
//---------------------------------------------------------------------------
// @function:
// CMemoryVisitorPrint::~CMemoryVisitorPrint
//
// @doc:
// Dtor.
//
//---------------------------------------------------------------------------
CMemoryVisitorPrint::~CMemoryVisitorPrint() = default;
//---------------------------------------------------------------------------
// @function:
// CMemoryVisitorPrint::FVisit
//
// @doc:
// Prints the live object information to the output stream.
//
//---------------------------------------------------------------------------
void
CMemoryVisitorPrint::Visit(void *user_addr, SIZE_T user_size, void *total_addr,
SIZE_T total_size, const CHAR *alloc_filename,
const ULONG alloc_line, ULLONG alloc_seq_number,
CStackDescriptor *stack_desc)
{
m_os << COstream::EsmDec << "allocation sequence number "
<< alloc_seq_number << ","
<< " total size " << (ULONG) total_size << " bytes,"
<< " base address " << total_addr << ","
<< " user size " << (ULONG) user_size << " bytes,"
<< " user address " << user_addr << ","
<< " allocated by " << alloc_filename << ":" << alloc_line
<< std::endl;
ITask *task = ITask::Self();
if (nullptr != task)
{
if (nullptr != stack_desc &&
task->IsTraceSet(EtracePrintMemoryLeakStackTrace))
{
m_os << "Stack trace: " << std::endl;
stack_desc->AppendTrace(m_os, 8 /*ulDepth*/);
}
if (task->IsTraceSet(EtracePrintMemoryLeakDump))
{
m_os << "Memory dump: " << std::endl;
gpos::HexDump(m_os, total_addr, total_size);
}
}
++m_visits;
}
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦