MCPcopy Create free account
hub / github.com/Vector35/debugger / GetController

Method GetController

core/debuggercontroller.cpp:1048–1074  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1046
1047
1048DbgRef<DebuggerController> DebuggerController::GetController(BinaryViewRef data)
1049{
1050 for (size_t i = 0; i < g_controllerCount; i++)
1051 {
1052 DebuggerController* controller = g_debuggerControllers[i];
1053 if (!controller)
1054 continue;
1055 if (controller->m_file.operator==(data->GetFile()))
1056 return controller;
1057 }
1058
1059 if (data->GetTypeName() == "Debugger")
1060 return nullptr;
1061
1062 auto controller = new DebuggerController(data);
1063 g_debuggerControllers = (DbgRef<DebuggerController>*)realloc(g_debuggerControllers,
1064 sizeof(DbgRef<DebuggerController>) * (g_controllerCount + 1));
1065
1066 // We must call the DbgRef ctor on the newly allocated space explicitly. If we do a
1067 // g_debuggerControllers[g_controllerCount] = controller;
1068 // The `=` operator on the next line will cause a call to `DbgRef<T>& operator=(T* obj)` on an uninitialized DbgRef
1069 // object, leading to a crash when `DbgRef::m_obj` is de-referenced.
1070 // In fact, this is how std::vector does things inside `push_back`.
1071 new (&g_debuggerControllers[g_controllerCount]) DbgRef<DebuggerController>(controller);
1072 g_controllerCount++;
1073 return controller;
1074}
1075
1076
1077void DebuggerController::DeleteController(BinaryViewRef data)

Callers 4

SetRegisterValueMethod · 0.45
GetAllRegistersMethod · 0.45
SerializeMetadataMethod · 0.45
UnserializedMetadataMethod · 0.45

Calls 1

operator==Method · 0.45

Tested by

no test coverage detected