Debugger support improvement
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / callstackbrowser.cpp
CommitLineData
0718b3f2
JPM
1//
2// callstackbrowser.cpp - Call Stack
3//
4// by Jean-Paul Mari
5//
6// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
7//
8// Who When What
9// --- ---------- -----------------------------------------------------------
10// JPM 08/31/2018 Created this file
11//
12
13// STILL TO DO:
14// Better display presentation
15// To display call function
16// To use DWARF frame information
17//
18
19#include "debugger/callstackbrowser.h"
20#include "memory.h"
21#include "debugger/DBGManager.h"
22#include "m68000/m68kinterface.h"
23
24
25//
26CallStackBrowserWindow::CallStackBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog),
27 layout(new QVBoxLayout), text(new QTextBrowser)
28{
29 setWindowTitle(tr("Call Stack"));
30
31 QFont fixedFont("Lucida Console", 8, QFont::Normal);
32 fixedFont.setStyleHint(QFont::TypeWriter);
33 text->setFont(fixedFont);
34 setLayout(layout);
35
36 layout->addWidget(text);
37}
38
39
40//
41CallStackBrowserWindow::~CallStackBrowserWindow(void)
42{
43}
44
45
46//
47void CallStackBrowserWindow::RefreshContents(void)
48{
49 unsigned int a6, Sa6, ret;
50 char *FuncName;
51 QString CallStack;
52 char string[1024];
53
54 if (isVisible())
55 {
56 if ((a6 = m68k_get_reg(NULL, M68K_REG_A6)) && DBGManager_GetType())
57 {
58 while ((Sa6 = a6))
59 {
60 a6 = GET32(jaguarMainRAM, Sa6);
61 ret = GET32(jaguarMainRAM, Sa6 + 4);
62
63 sprintf(string, "0x%06X | Ret: 0x%06X | From: %s - 0x%06X", Sa6, ret, (FuncName = DBGManager_GetFunctionName(ret)), (unsigned int)DBGManager_GetAdrFromSymbolName(FuncName));
64 CallStack += QString(string);
65 if (a6)
66 {
67 sprintf(string, "<br>");
68 CallStack += QString(string);
69 }
70 }
71
72 text->clear();
73 text->setText(CallStack);
74 }
75 else
76 {
77 text->clear();
78 }
79 }
80}
81
82
83//
84void CallStackBrowserWindow::keyPressEvent(QKeyEvent * e)
85{
86 if (e->key() == Qt::Key_Escape)
87 {
88 hide();
89 }
90}
91
92