diff options
| author | 2017-05-07 14:44:43 -0700 | |
|---|---|---|
| committer | 2017-05-07 15:32:47 -0700 | |
| commit | 4af2a1a3d74eb5e77b59e4557c50e230d453d7d9 (patch) | |
| tree | eeecf3ec67b666805db0aaa9e91af407c7b29773 /src | |
| parent | citra-qt: Remove disassembler widget (diff) | |
| download | yuzu-4af2a1a3d74eb5e77b59e4557c50e230d453d7d9.tar.gz yuzu-4af2a1a3d74eb5e77b59e4557c50e230d453d7d9.tar.xz yuzu-4af2a1a3d74eb5e77b59e4557c50e230d453d7d9.zip | |
citra-qt: Remove callstack widget
Appears to be currently broken, and given the complexity of doing this
for ARM code without debugging information, should probably be left to
an external tool or library. Use the GDB stub instead.
Closes #586
Diffstat (limited to 'src')
| -rw-r--r-- | src/citra_qt/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/citra_qt/debugger/callstack.cpp | 85 | ||||
| -rw-r--r-- | src/citra_qt/debugger/callstack.h | 28 | ||||
| -rw-r--r-- | src/citra_qt/debugger/callstack.ui | 39 | ||||
| -rw-r--r-- | src/citra_qt/main.cpp | 11 | ||||
| -rw-r--r-- | src/citra_qt/main.h | 2 |
6 files changed, 0 insertions, 168 deletions
diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index 0b4fe6dd2..4e837668e 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt | |||
| @@ -11,7 +11,6 @@ set(SRCS | |||
| 11 | configuration/configure_graphics.cpp | 11 | configuration/configure_graphics.cpp |
| 12 | configuration/configure_input.cpp | 12 | configuration/configure_input.cpp |
| 13 | configuration/configure_system.cpp | 13 | configuration/configure_system.cpp |
| 14 | debugger/callstack.cpp | ||
| 15 | debugger/graphics/graphics.cpp | 14 | debugger/graphics/graphics.cpp |
| 16 | debugger/graphics/graphics_breakpoint_observer.cpp | 15 | debugger/graphics/graphics_breakpoint_observer.cpp |
| 17 | debugger/graphics/graphics_breakpoints.cpp | 16 | debugger/graphics/graphics_breakpoints.cpp |
| @@ -42,7 +41,6 @@ set(HEADERS | |||
| 42 | configuration/configure_graphics.h | 41 | configuration/configure_graphics.h |
| 43 | configuration/configure_input.h | 42 | configuration/configure_input.h |
| 44 | configuration/configure_system.h | 43 | configuration/configure_system.h |
| 45 | debugger/callstack.h | ||
| 46 | debugger/graphics/graphics.h | 44 | debugger/graphics/graphics.h |
| 47 | debugger/graphics/graphics_breakpoint_observer.h | 45 | debugger/graphics/graphics_breakpoint_observer.h |
| 48 | debugger/graphics/graphics_breakpoints.h | 46 | debugger/graphics/graphics_breakpoints.h |
| @@ -72,7 +70,6 @@ set(UIS | |||
| 72 | configuration/configure_graphics.ui | 70 | configuration/configure_graphics.ui |
| 73 | configuration/configure_input.ui | 71 | configuration/configure_input.ui |
| 74 | configuration/configure_system.ui | 72 | configuration/configure_system.ui |
| 75 | debugger/callstack.ui | ||
| 76 | debugger/registers.ui | 73 | debugger/registers.ui |
| 77 | hotkeys.ui | 74 | hotkeys.ui |
| 78 | main.ui | 75 | main.ui |
diff --git a/src/citra_qt/debugger/callstack.cpp b/src/citra_qt/debugger/callstack.cpp deleted file mode 100644 index 08d2e7a22..000000000 --- a/src/citra_qt/debugger/callstack.cpp +++ /dev/null | |||
| @@ -1,85 +0,0 @@ | |||
| 1 | // Copyright 2014 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <QStandardItemModel> | ||
| 6 | #include "citra_qt/debugger/callstack.h" | ||
| 7 | #include "common/common_types.h" | ||
| 8 | #include "common/symbols.h" | ||
| 9 | #include "core/arm/arm_interface.h" | ||
| 10 | #include "core/arm/disassembler/arm_disasm.h" | ||
| 11 | #include "core/core.h" | ||
| 12 | #include "core/memory.h" | ||
| 13 | |||
| 14 | CallstackWidget::CallstackWidget(QWidget* parent) : QDockWidget(parent) { | ||
| 15 | ui.setupUi(this); | ||
| 16 | |||
| 17 | callstack_model = new QStandardItemModel(this); | ||
| 18 | callstack_model->setColumnCount(4); | ||
| 19 | callstack_model->setHeaderData(0, Qt::Horizontal, "Stack Pointer"); | ||
| 20 | callstack_model->setHeaderData(2, Qt::Horizontal, "Return Address"); | ||
| 21 | callstack_model->setHeaderData(1, Qt::Horizontal, "Call Address"); | ||
| 22 | callstack_model->setHeaderData(3, Qt::Horizontal, "Function"); | ||
| 23 | ui.treeView->setModel(callstack_model); | ||
| 24 | } | ||
| 25 | |||
| 26 | void CallstackWidget::OnDebugModeEntered() { | ||
| 27 | // Stack pointer | ||
| 28 | const u32 sp = Core::CPU().GetReg(13); | ||
| 29 | |||
| 30 | Clear(); | ||
| 31 | |||
| 32 | int counter = 0; | ||
| 33 | for (u32 addr = 0x10000000; addr >= sp; addr -= 4) { | ||
| 34 | if (!Memory::IsValidVirtualAddress(addr)) | ||
| 35 | break; | ||
| 36 | |||
| 37 | const u32 ret_addr = Memory::Read32(addr); | ||
| 38 | const u32 call_addr = ret_addr - 4; // get call address??? | ||
| 39 | |||
| 40 | if (!Memory::IsValidVirtualAddress(call_addr)) | ||
| 41 | break; | ||
| 42 | |||
| 43 | /* TODO (mattvail) clean me, move to debugger interface */ | ||
| 44 | u32 insn = Memory::Read32(call_addr); | ||
| 45 | if (ARM_Disasm::Decode(insn) == OP_BL) { | ||
| 46 | std::string name; | ||
| 47 | // ripped from disasm | ||
| 48 | u32 i_offset = insn & 0xffffff; | ||
| 49 | // Sign-extend the 24-bit offset | ||
| 50 | if ((i_offset >> 23) & 1) | ||
| 51 | i_offset |= 0xff000000; | ||
| 52 | |||
| 53 | // Pre-compute the left-shift and the prefetch offset | ||
| 54 | i_offset <<= 2; | ||
| 55 | i_offset += 8; | ||
| 56 | const u32 func_addr = call_addr + i_offset; | ||
| 57 | |||
| 58 | callstack_model->setItem( | ||
| 59 | counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0')))); | ||
| 60 | callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg( | ||
| 61 | ret_addr, 8, 16, QLatin1Char('0')))); | ||
| 62 | callstack_model->setItem(counter, 2, new QStandardItem(QString("0x%1").arg( | ||
| 63 | call_addr, 8, 16, QLatin1Char('0')))); | ||
| 64 | |||
| 65 | name = Symbols::HasSymbol(func_addr) ? Symbols::GetSymbol(func_addr).name : "unknown"; | ||
| 66 | callstack_model->setItem( | ||
| 67 | counter, 3, new QStandardItem( | ||
| 68 | QString("%1_%2") | ||
| 69 | .arg(QString::fromStdString(name)) | ||
| 70 | .arg(QString("0x%1").arg(func_addr, 8, 16, QLatin1Char('0'))))); | ||
| 71 | |||
| 72 | counter++; | ||
| 73 | } | ||
| 74 | } | ||
| 75 | } | ||
| 76 | |||
| 77 | void CallstackWidget::OnDebugModeLeft() {} | ||
| 78 | |||
| 79 | void CallstackWidget::Clear() { | ||
| 80 | for (int row = 0; row < callstack_model->rowCount(); row++) { | ||
| 81 | for (int column = 0; column < callstack_model->columnCount(); column++) { | ||
| 82 | callstack_model->setItem(row, column, new QStandardItem()); | ||
| 83 | } | ||
| 84 | } | ||
| 85 | } | ||
diff --git a/src/citra_qt/debugger/callstack.h b/src/citra_qt/debugger/callstack.h deleted file mode 100644 index f04ab9c7e..000000000 --- a/src/citra_qt/debugger/callstack.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | // Copyright 2014 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <QDockWidget> | ||
| 8 | #include "ui_callstack.h" | ||
| 9 | |||
| 10 | class QStandardItemModel; | ||
| 11 | |||
| 12 | class CallstackWidget : public QDockWidget { | ||
| 13 | Q_OBJECT | ||
| 14 | |||
| 15 | public: | ||
| 16 | explicit CallstackWidget(QWidget* parent = nullptr); | ||
| 17 | |||
| 18 | public slots: | ||
| 19 | void OnDebugModeEntered(); | ||
| 20 | void OnDebugModeLeft(); | ||
| 21 | |||
| 22 | private: | ||
| 23 | Ui::CallStack ui; | ||
| 24 | QStandardItemModel* callstack_model; | ||
| 25 | |||
| 26 | /// Clears the callstack widget while keeping the column widths the same | ||
| 27 | void Clear(); | ||
| 28 | }; | ||
diff --git a/src/citra_qt/debugger/callstack.ui b/src/citra_qt/debugger/callstack.ui deleted file mode 100644 index 248ea3dd7..000000000 --- a/src/citra_qt/debugger/callstack.ui +++ /dev/null | |||
| @@ -1,39 +0,0 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <ui version="4.0"> | ||
| 3 | <class>CallStack</class> | ||
| 4 | <widget class="QDockWidget" name="CallStack"> | ||
| 5 | <property name="geometry"> | ||
| 6 | <rect> | ||
| 7 | <x>0</x> | ||
| 8 | <y>0</y> | ||
| 9 | <width>400</width> | ||
| 10 | <height>300</height> | ||
| 11 | </rect> | ||
| 12 | </property> | ||
| 13 | <property name="windowTitle"> | ||
| 14 | <string>Call Stack</string> | ||
| 15 | </property> | ||
| 16 | <widget class="QWidget" name="dockWidgetContents"> | ||
| 17 | <layout class="QVBoxLayout" name="verticalLayout"> | ||
| 18 | <item> | ||
| 19 | <widget class="QTreeView" name="treeView"> | ||
| 20 | <property name="editTriggers"> | ||
| 21 | <set>QAbstractItemView::NoEditTriggers</set> | ||
| 22 | </property> | ||
| 23 | <property name="alternatingRowColors"> | ||
| 24 | <bool>true</bool> | ||
| 25 | </property> | ||
| 26 | <property name="rootIsDecorated"> | ||
| 27 | <bool>false</bool> | ||
| 28 | </property> | ||
| 29 | <property name="itemsExpandable"> | ||
| 30 | <bool>false</bool> | ||
| 31 | </property> | ||
| 32 | </widget> | ||
| 33 | </item> | ||
| 34 | </layout> | ||
| 35 | </widget> | ||
| 36 | </widget> | ||
| 37 | <resources/> | ||
| 38 | <connections/> | ||
| 39 | </ui> | ||
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 50149bcb0..9beec69bc 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include "citra_qt/bootmanager.h" | 16 | #include "citra_qt/bootmanager.h" |
| 17 | #include "citra_qt/configuration/config.h" | 17 | #include "citra_qt/configuration/config.h" |
| 18 | #include "citra_qt/configuration/configure_dialog.h" | 18 | #include "citra_qt/configuration/configure_dialog.h" |
| 19 | #include "citra_qt/debugger/callstack.h" | ||
| 20 | #include "citra_qt/debugger/graphics/graphics.h" | 19 | #include "citra_qt/debugger/graphics/graphics.h" |
| 21 | #include "citra_qt/debugger/graphics/graphics_breakpoints.h" | 20 | #include "citra_qt/debugger/graphics/graphics_breakpoints.h" |
| 22 | #include "citra_qt/debugger/graphics/graphics_cmdlists.h" | 21 | #include "citra_qt/debugger/graphics/graphics_cmdlists.h" |
| @@ -138,11 +137,6 @@ void GMainWindow::InitializeDebugWidgets() { | |||
| 138 | connect(this, &GMainWindow::EmulationStopping, registersWidget, | 137 | connect(this, &GMainWindow::EmulationStopping, registersWidget, |
| 139 | &RegistersWidget::OnEmulationStopping); | 138 | &RegistersWidget::OnEmulationStopping); |
| 140 | 139 | ||
| 141 | callstackWidget = new CallstackWidget(this); | ||
| 142 | addDockWidget(Qt::RightDockWidgetArea, callstackWidget); | ||
| 143 | callstackWidget->hide(); | ||
| 144 | debug_menu->addAction(callstackWidget->toggleViewAction()); | ||
| 145 | |||
| 146 | graphicsWidget = new GPUCommandStreamWidget(this); | 140 | graphicsWidget = new GPUCommandStreamWidget(this); |
| 147 | addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); | 141 | addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); |
| 148 | graphicsWidget->hide(); | 142 | graphicsWidget->hide(); |
| @@ -383,20 +377,15 @@ void GMainWindow::BootGame(const QString& filename) { | |||
| 383 | // before the CPU continues | 377 | // before the CPU continues |
| 384 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, | 378 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, |
| 385 | SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | 379 | SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); |
| 386 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), callstackWidget, | ||
| 387 | SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | ||
| 388 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), waitTreeWidget, | 380 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), waitTreeWidget, |
| 389 | SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | 381 | SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); |
| 390 | connect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()), | 382 | connect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()), |
| 391 | Qt::BlockingQueuedConnection); | 383 | Qt::BlockingQueuedConnection); |
| 392 | connect(emu_thread.get(), SIGNAL(DebugModeLeft()), callstackWidget, SLOT(OnDebugModeLeft()), | ||
| 393 | Qt::BlockingQueuedConnection); | ||
| 394 | connect(emu_thread.get(), SIGNAL(DebugModeLeft()), waitTreeWidget, SLOT(OnDebugModeLeft()), | 384 | connect(emu_thread.get(), SIGNAL(DebugModeLeft()), waitTreeWidget, SLOT(OnDebugModeLeft()), |
| 395 | Qt::BlockingQueuedConnection); | 385 | Qt::BlockingQueuedConnection); |
| 396 | 386 | ||
| 397 | // Update the GUI | 387 | // Update the GUI |
| 398 | registersWidget->OnDebugModeEntered(); | 388 | registersWidget->OnDebugModeEntered(); |
| 399 | callstackWidget->OnDebugModeEntered(); | ||
| 400 | if (ui.action_Single_Window_Mode->isChecked()) { | 389 | if (ui.action_Single_Window_Mode->isChecked()) { |
| 401 | game_list->hide(); | 390 | game_list->hide(); |
| 402 | } | 391 | } |
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index 2417dc2cb..ded089580 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #include <QTimer> | 10 | #include <QTimer> |
| 11 | #include "ui_main.h" | 11 | #include "ui_main.h" |
| 12 | 12 | ||
| 13 | class CallstackWidget; | ||
| 14 | class Config; | 13 | class Config; |
| 15 | class EmuThread; | 14 | class EmuThread; |
| 16 | class GameList; | 15 | class GameList; |
| @@ -152,7 +151,6 @@ private: | |||
| 152 | ProfilerWidget* profilerWidget; | 151 | ProfilerWidget* profilerWidget; |
| 153 | MicroProfileDialog* microProfileDialog; | 152 | MicroProfileDialog* microProfileDialog; |
| 154 | RegistersWidget* registersWidget; | 153 | RegistersWidget* registersWidget; |
| 155 | CallstackWidget* callstackWidget; | ||
| 156 | GPUCommandStreamWidget* graphicsWidget; | 154 | GPUCommandStreamWidget* graphicsWidget; |
| 157 | GPUCommandListWidget* graphicsCommandsWidget; | 155 | GPUCommandListWidget* graphicsCommandsWidget; |
| 158 | GraphicsBreakPointsWidget* graphicsBreakpointsWidget; | 156 | GraphicsBreakPointsWidget* graphicsBreakpointsWidget; |