From ecf797d63332da1f71393d8cb70c26b4514e87ce Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 12 Oct 2025 01:41:02 -0400 Subject: [PATCH] feat(agent): implement advanced debugging features in EmulatorService - Added methods for managing breakpoints, including adding, removing, listing, and enabling/disabling breakpoints. - Introduced watchpoint management methods, although integration is pending. - Implemented execution control features such as stepping through instructions and running to breakpoints. - Enhanced disassembly capabilities to retrieve and display instruction details from memory. - Updated header file to include new debugging functionalities, ensuring clarity and modularity. Benefits: - Improved debugging capabilities for the emulator, facilitating better development and testing workflows. - Enhanced user experience by providing detailed control over execution and memory analysis. --- .../service/agent/emulator_service_impl.cc | 442 +++++++++++++++++- src/cli/service/agent/emulator_service_impl.h | 32 ++ 2 files changed, 464 insertions(+), 10 deletions(-) diff --git a/src/cli/service/agent/emulator_service_impl.cc b/src/cli/service/agent/emulator_service_impl.cc index 69412e96..767ce435 100644 --- a/src/cli/service/agent/emulator_service_impl.cc +++ b/src/cli/service/agent/emulator_service_impl.cc @@ -2,6 +2,9 @@ #include "app/emu/emulator.h" #include "app/core/service/screenshot_utils.h" #include "app/emu/input/input_backend.h" // Required for SnesButton enum +#include "app/emu/debug/breakpoint_manager.h" +#include "app/emu/debug/watchpoint_manager.h" +#include "app/emu/debug/disassembly_viewer.h" #include "absl/strings/escaping.h" #include "absl/strings/str_format.h" #include @@ -82,12 +85,12 @@ grpc::Status EmulatorServiceImpl::Reset(grpc::ServerContext* context, const Empt grpc::Status EmulatorServiceImpl::PressButtons(grpc::ServerContext* context, const ButtonRequest* request, CommandResponse* response) { if (!emulator_) return grpc::Status(grpc::StatusCode::UNAVAILABLE, "Emulator not initialized."); auto& input_manager = emulator_->input_manager(); - for (const auto& button : request->buttons()) { - input_manager.PressButton(ToSnesButton(static_cast