diff --git a/rpcs3/rpcs3qt/breakpoint_list.cpp b/rpcs3/rpcs3qt/breakpoint_list.cpp index 12e6acfb0e..e64df68dff 100644 --- a/rpcs3/rpcs3qt/breakpoint_list.cpp +++ b/rpcs3/rpcs3qt/breakpoint_list.cpp @@ -86,18 +86,21 @@ void breakpoint_list::AddBreakpoint(u32 pc) */ void breakpoint_list::HandleBreakpointRequest(u32 loc) { + const auto cpu = this->cpu.lock(); + + if (!cpu || cpu->id_type() != 1 || !vm::check_addr(loc, vm::page_allocated | vm::page_executable)) + { + // TODO: SPU breakpoints + return; + } + if (m_breakpoint_handler->HasBreakpoint(loc)) { RemoveBreakpoint(loc); } else { - const auto cpu = this->cpu.lock(); - - if (cpu->id_type() == 1 && vm::check_addr(loc, vm::page_allocated | vm::page_executable)) - { - AddBreakpoint(loc); - } + AddBreakpoint(loc); } } diff --git a/rpcs3/rpcs3qt/debugger_frame.cpp b/rpcs3/rpcs3qt/debugger_frame.cpp index b00bc5f557..ec638fbcd4 100644 --- a/rpcs3/rpcs3qt/debugger_frame.cpp +++ b/rpcs3/rpcs3qt/debugger_frame.cpp @@ -226,7 +226,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event) const auto cpu = this->cpu.lock(); int i = m_debugger_list->currentRow(); - if (!isActiveWindow() || !cpu || m_no_thread_selected) + if (!isActiveWindow() || !cpu) { return; } @@ -356,8 +356,6 @@ void debugger_frame::UpdateUI() { UpdateUnitList(); - if (m_no_thread_selected) return; - const auto cpu = this->cpu.lock(); if (!cpu) @@ -449,18 +447,22 @@ void debugger_frame::UpdateUnitList() void debugger_frame::OnSelectUnit() { - if (m_choice_units->count() < 1 || m_current_choice == m_choice_units->currentText()) return; + if (m_choice_units->count() < 1) return; - m_current_choice = m_choice_units->currentText(); - m_no_thread_selected = m_current_choice == NoThreadString; - m_debugger_list->m_no_thread_selected = m_no_thread_selected; + const auto weak = m_choice_units->currentData().value>(); + + if (!weak.owner_before(cpu) && !cpu.owner_before(weak)) + { + // They match, nothing to do. + return; + } m_disasm.reset(); cpu.reset(); - if (!m_no_thread_selected) + if (!weak.expired()) { - if (const auto cpu0 = m_choice_units->currentData().value>().lock()) + if (const auto cpu0 = weak.lock()) { if (cpu0->id_type() == 1) { @@ -481,7 +483,7 @@ void debugger_frame::OnSelectUnit() } } - EnableButtons(!m_no_thread_selected); + EnableButtons(true); m_debugger_list->UpdateCPUData(this->cpu, m_disasm); m_breakpoint_list->UpdateCPUData(this->cpu, m_disasm); @@ -698,7 +700,7 @@ void debugger_frame::EnableUpdateTimer(bool enable) void debugger_frame::EnableButtons(bool enable) { - if (m_no_thread_selected) enable = false; + if (cpu.expired()) enable = false; m_go_to_addr->setEnabled(enable); m_go_to_pc->setEnabled(enable); diff --git a/rpcs3/rpcs3qt/debugger_frame.h b/rpcs3/rpcs3qt/debugger_frame.h index 89e508d29c..317ea23883 100644 --- a/rpcs3/rpcs3qt/debugger_frame.h +++ b/rpcs3/rpcs3qt/debugger_frame.h @@ -36,7 +36,6 @@ class debugger_frame : public custom_dock_widget QPushButton* m_btn_step_over; QPushButton* m_btn_run; QComboBox* m_choice_units; - QString m_current_choice; QTimer* m_update; QSplitter* m_splitter; @@ -45,7 +44,6 @@ class debugger_frame : public custom_dock_widget u32 m_last_pc = -1; std::vector m_last_query_state; u32 m_last_step_over_breakpoint = -1; - bool m_no_thread_selected = true; std::shared_ptr m_disasm; std::weak_ptr cpu; diff --git a/rpcs3/rpcs3qt/debugger_list.cpp b/rpcs3/rpcs3qt/debugger_list.cpp index cf0759f757..027b73d131 100644 --- a/rpcs3/rpcs3qt/debugger_list.cpp +++ b/rpcs3/rpcs3qt/debugger_list.cpp @@ -149,7 +149,7 @@ void debugger_list::keyPressEvent(QKeyEvent* event) void debugger_list::mouseDoubleClickEvent(QMouseEvent* event) { - if (event->button() == Qt::LeftButton && !Emu.IsStopped() && !m_no_thread_selected) + if (event->button() == Qt::LeftButton) { int i = currentRow(); if (i < 0) return; diff --git a/rpcs3/rpcs3qt/debugger_list.h b/rpcs3/rpcs3qt/debugger_list.h index 9af9e498fd..fdd4e7d623 100644 --- a/rpcs3/rpcs3qt/debugger_list.h +++ b/rpcs3/rpcs3qt/debugger_list.h @@ -16,7 +16,6 @@ class debugger_list : public QListWidget public: u32 m_pc = 0; u32 m_item_count = 30; - bool m_no_thread_selected; QColor m_color_bp; QColor m_color_pc; QColor m_text_color_bp;