diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index 24f7d3a2da..f8a9d5993d 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -159,6 +159,36 @@ static const char *GetAccessViolationTypeString(uint type) } buffer += seprintf(buffer, last, " Message: %s\n\n", message == nullptr ? "" : message); + + if (message != nullptr && strcasestr(message, "out of memory") != nullptr) { + PROCESS_MEMORY_COUNTERS pmc; + if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) { + buffer += seprintf(buffer, last, " WorkingSetSize: " PRINTF_SIZE "\n", pmc.WorkingSetSize); + buffer += seprintf(buffer, last, " PeakWorkingSetSize: " PRINTF_SIZE "\n", pmc.PeakWorkingSetSize); + buffer += seprintf(buffer, last, " QuotaPagedPoolUsage: " PRINTF_SIZE "\n", pmc.QuotaPagedPoolUsage); + buffer += seprintf(buffer, last, " QuotaPeakPagedPoolUsage: " PRINTF_SIZE "\n", pmc.QuotaPeakPagedPoolUsage); + buffer += seprintf(buffer, last, " QuotaNonPagedPoolUsage: " PRINTF_SIZE "\n", pmc.QuotaNonPagedPoolUsage); + buffer += seprintf(buffer, last, " QuotaPeakNonPagedPoolUsage: " PRINTF_SIZE "\n", pmc.QuotaPeakNonPagedPoolUsage); + buffer += seprintf(buffer, last, " PagefileUsage: " PRINTF_SIZE "\n", pmc.PagefileUsage); + buffer += seprintf(buffer, last, " PeakPagefileUsage: " PRINTF_SIZE "\n\n", pmc.PeakPagefileUsage); + } + PERFORMANCE_INFORMATION perf; + if (GetPerformanceInfo(&perf, sizeof(perf))) { + buffer += seprintf(buffer, last, " CommitTotal: " PRINTF_SIZE "\n", perf.CommitTotal); + buffer += seprintf(buffer, last, " CommitLimit: " PRINTF_SIZE "\n", perf.CommitLimit); + buffer += seprintf(buffer, last, " CommitPeak: " PRINTF_SIZE "\n", perf.CommitPeak); + buffer += seprintf(buffer, last, " PhysicalTotal: " PRINTF_SIZE "\n", perf.PhysicalTotal); + buffer += seprintf(buffer, last, " PhysicalAvailable: " PRINTF_SIZE "\n", perf.PhysicalAvailable); + buffer += seprintf(buffer, last, " SystemCache: " PRINTF_SIZE "\n", perf.SystemCache); + buffer += seprintf(buffer, last, " KernelTotal: " PRINTF_SIZE "\n", perf.KernelTotal); + buffer += seprintf(buffer, last, " KernelPaged: " PRINTF_SIZE "\n", perf.KernelPaged); + buffer += seprintf(buffer, last, " KernelNonpaged: " PRINTF_SIZE "\n", perf.KernelNonpaged); + buffer += seprintf(buffer, last, " PageSize: " PRINTF_SIZE "\n", perf.PageSize); + buffer += seprintf(buffer, last, " HandleCount: %u\n", (uint)perf.HandleCount); + buffer += seprintf(buffer, last, " ProcessCount: %u\n", (uint)perf.ProcessCount); + buffer += seprintf(buffer, last, " ThreadCount: %u\n\n", (uint)perf.ThreadCount); + } + } return buffer; }