#include "LeakTracer.h" #include "DateTime.h" #include #include LeakTracer::LeakTracer(const std::string &path, const std::string &applicationName) : m_path(path), m_applicationName(applicationName) { } LeakTracer::~LeakTracer() { stop(); } void LeakTracer::run() { using namespace std::chrono; using namespace std::chrono_literals; while (!m_exit) { auto start = system_clock::now(); leaktracer_startMonitoringAllThreads(); while (!m_exit) { std::this_thread::sleep_for(50ms); auto now = system_clock::now(); auto elapsed = duration_cast(now - start); if (elapsed >= m_intervals) break; } std::ostringstream oss; oss << m_path << "/" << m_applicationName << "_" << DateTime(start).toString("%Y%m%d%H%M%S") << "-" << DateTime::currentDateTime().toString("%Y%m%d%H%M%S") << ".dump"; leaktracer_writeLeaksToFile(oss.str().c_str()); leaktracer_stopAllMonitoring(); } } void LeakTracer::stop() { if (!m_exit) { m_exit = true; if (m_thread.joinable()) m_thread.join(); } }