From 0718b3f24b77771133f51152e519f027728277f8 Mon Sep 17 00:00:00 2001 From: Jean-Paul Mari Date: Sun, 2 Sep 2018 22:23:20 -0400 Subject: [PATCH] Added a call stack feature --- src/debugger/callstackbrowser.cpp | 92 +++++++++++++++++++++++++++++++ src/debugger/callstackbrowser.h | 32 +++++++++++ virtualjaguar.pro | 2 + 3 files changed, 126 insertions(+) create mode 100644 src/debugger/callstackbrowser.cpp create mode 100644 src/debugger/callstackbrowser.h diff --git a/src/debugger/callstackbrowser.cpp b/src/debugger/callstackbrowser.cpp new file mode 100644 index 0000000..77fe154 --- /dev/null +++ b/src/debugger/callstackbrowser.cpp @@ -0,0 +1,92 @@ +// +// callstackbrowser.cpp - Call Stack +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JPM 08/31/2018 Created this file +// + +// STILL TO DO: +// Better display presentation +// To display call function +// To use DWARF frame information +// + +#include "debugger/callstackbrowser.h" +#include "memory.h" +#include "debugger/DBGManager.h" +#include "m68000/m68kinterface.h" + + +// +CallStackBrowserWindow::CallStackBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), + layout(new QVBoxLayout), text(new QTextBrowser) +{ + setWindowTitle(tr("Call Stack")); + + QFont fixedFont("Lucida Console", 8, QFont::Normal); + fixedFont.setStyleHint(QFont::TypeWriter); + text->setFont(fixedFont); + setLayout(layout); + + layout->addWidget(text); +} + + +// +CallStackBrowserWindow::~CallStackBrowserWindow(void) +{ +} + + +// +void CallStackBrowserWindow::RefreshContents(void) +{ + unsigned int a6, Sa6, ret; + char *FuncName; + QString CallStack; + char string[1024]; + + if (isVisible()) + { + if ((a6 = m68k_get_reg(NULL, M68K_REG_A6)) && DBGManager_GetType()) + { + while ((Sa6 = a6)) + { + a6 = GET32(jaguarMainRAM, Sa6); + ret = GET32(jaguarMainRAM, Sa6 + 4); + + sprintf(string, "0x%06X | Ret: 0x%06X | From: %s - 0x%06X", Sa6, ret, (FuncName = DBGManager_GetFunctionName(ret)), (unsigned int)DBGManager_GetAdrFromSymbolName(FuncName)); + CallStack += QString(string); + if (a6) + { + sprintf(string, "
"); + CallStack += QString(string); + } + } + + text->clear(); + text->setText(CallStack); + } + else + { + text->clear(); + } + } +} + + +// +void CallStackBrowserWindow::keyPressEvent(QKeyEvent * e) +{ + if (e->key() == Qt::Key_Escape) + { + hide(); + } +} + + diff --git a/src/debugger/callstackbrowser.h b/src/debugger/callstackbrowser.h new file mode 100644 index 0000000..8ae56f1 --- /dev/null +++ b/src/debugger/callstackbrowser.h @@ -0,0 +1,32 @@ +// +// callstackbrowser.h: Call Stack +// +// by Jean-Paul Mari +// + +#ifndef __CALLSTACKBROWSER_H__ +#define __CALLSTACKBROWSER_H__ + +#include +#include + +class CallStackBrowserWindow : public QWidget +{ + Q_OBJECT + + public: + CallStackBrowserWindow(QWidget *parent = 0); + ~CallStackBrowserWindow(void); + + public slots: + void RefreshContents(void); + + protected: + void keyPressEvent(QKeyEvent *); + + private: + QVBoxLayout *layout; + QTextBrowser * text; +}; + +#endif // __CALLSTACKBROWSER_H__ diff --git a/virtualjaguar.pro b/virtualjaguar.pro index 9a76664..1229262 100644 --- a/virtualjaguar.pro +++ b/virtualjaguar.pro @@ -119,6 +119,7 @@ HEADERS = \ src/debugger/heapallocatorbrowser.h \ src/debugger/brkWin.h \ src/debugger/VideoWin.h \ + src/debugger/callstackbrowser.h \ src/debugger/exceptionvectortablebrowser.h \ src/log.h \ src/unzip.h \ @@ -168,6 +169,7 @@ SOURCES = \ src/debugger/brkWin.cpp \ src/debugger/VideoWin.cpp \ src/debugger/exceptionvectortablebrowser.cpp \ + src/debugger/callstackbrowser.cpp \ src/log.cpp \ src/unzip.cpp \ src/crc32.cpp \ -- 2.20.1