diff options
Diffstat (limited to 'src/shared/leaktrace.cpp')
| -rw-r--r-- | src/shared/leaktrace.cpp | 70 |
1 files changed, 30 insertions, 40 deletions
diff --git a/src/shared/leaktrace.cpp b/src/shared/leaktrace.cpp index 1ff1fa9d..dd85c4b4 100644 --- a/src/shared/leaktrace.cpp +++ b/src/shared/leaktrace.cpp @@ -1,57 +1,47 @@ #include "leaktrace.h"
#include "stackdata.h"
-#include <Windows.h>
#include <DbgHelp.h>
-#include <set>
+#include <Windows.h>
+#include <algorithm>
#include <map>
-#include <vector>
+#include <set>
#include <sstream>
-#include <algorithm>
-
+#include <vector>
using namespace MOShared;
-
static struct __TraceData {
- void regTrace(void *pointer, const char *functionName, int line) {
- m_Traces[reinterpret_cast<unsigned long>(pointer)] = StackData(functionName, line);
- }
- void deregTrace(void *pointer) {
- auto iter = m_Traces.find(reinterpret_cast<unsigned long>(pointer));
- if (iter != m_Traces.end()) {
- m_Traces.erase(iter);
+ void regTrace(void* pointer, const char* functionName, int line) {
+ m_Traces[reinterpret_cast<unsigned long>(pointer)] = StackData(functionName, line);
}
- }
-
- ~__TraceData() {
- std::map<StackData, std::vector<unsigned long> > result;
- for (auto iter = m_Traces.begin(); iter != m_Traces.end(); ++iter) {
- result[iter->second].push_back(iter->first);
+ void deregTrace(void* pointer) {
+ auto iter = m_Traces.find(reinterpret_cast<unsigned long>(pointer));
+ if (iter != m_Traces.end()) {
+ m_Traces.erase(iter);
+ }
}
- for (auto iter = result.begin(); iter != result.end(); ++iter) {
- printf("-----------------------------------\n"
- "%d objects not freed, allocated at:\n%s",
- iter->second.size(), iter->first.toString().c_str());
- printf("Addresses: ");
- for (int i = 0;
- i < (std::min<int>)(5, static_cast<int>(iter->second.size())); ++i) {
- printf("%p, ", reinterpret_cast<void *>(iter->second[i]));
- }
- printf("\n");
+
+ ~__TraceData() {
+ std::map<StackData, std::vector<unsigned long>> result;
+ for (auto iter = m_Traces.begin(); iter != m_Traces.end(); ++iter) {
+ result[iter->second].push_back(iter->first);
+ }
+ for (auto iter = result.begin(); iter != result.end(); ++iter) {
+ printf("-----------------------------------\n"
+ "%d objects not freed, allocated at:\n%s",
+ iter->second.size(), iter->first.toString().c_str());
+ printf("Addresses: ");
+ for (int i = 0; i < (std::min<int>)(5, static_cast<int>(iter->second.size())); ++i) {
+ printf("%p, ", reinterpret_cast<void*>(iter->second[i]));
+ }
+ printf("\n");
+ }
}
- }
- std::map<unsigned long, StackData> m_Traces;
+ std::map<unsigned long, StackData> m_Traces;
} __trace;
+void LeakTrace::TraceAlloc(void* ptr, const char* functionName, int line) { __trace.regTrace(ptr, functionName, line); }
-void LeakTrace::TraceAlloc(void *ptr, const char *functionName, int line)
-{
- __trace.regTrace(ptr, functionName, line);
-}
-
-void LeakTrace::TraceDealloc(void *ptr)
-{
- __trace.deregTrace(ptr);
-}
+void LeakTrace::TraceDealloc(void* ptr) { __trace.deregTrace(ptr); }
|
