2021-09-01 14:01:00 -05:00
|
|
|
#include "SeerStackManagerWidget.h"
|
2021-11-07 13:53:46 -06:00
|
|
|
#include "SeerUtl.h"
|
2021-09-01 14:01:00 -05:00
|
|
|
#include <QtWidgets/QToolButton>
|
|
|
|
|
#include <QtGui/QIcon>
|
|
|
|
|
#include <QtCore/QDebug>
|
|
|
|
|
|
|
|
|
|
SeerStackManagerWidget::SeerStackManagerWidget (QWidget* parent) : QWidget(parent) {
|
|
|
|
|
|
|
|
|
|
// Initialize private data
|
|
|
|
|
|
|
|
|
|
// Setup UI
|
|
|
|
|
setupUi(this);
|
|
|
|
|
|
|
|
|
|
// Setup the widgets
|
|
|
|
|
tabWidget->setMovable(true);
|
|
|
|
|
tabWidget->setTabsClosable(false);
|
|
|
|
|
|
|
|
|
|
_stackFramesBrowserWidget = new SeerStackFramesBrowserWidget(this);
|
|
|
|
|
_stackArgumentsBrowserWidget = new SeerStackArgumentsBrowserWidget(this);
|
|
|
|
|
_stackLocalsBrowserWidget = new SeerStackLocalsBrowserWidget(this);
|
|
|
|
|
|
|
|
|
|
tabWidget->addTab(_stackFramesBrowserWidget, "Frames");
|
|
|
|
|
tabWidget->addTab(_stackArgumentsBrowserWidget, "Arguments");
|
|
|
|
|
tabWidget->addTab(_stackLocalsBrowserWidget, "Locals");
|
|
|
|
|
|
|
|
|
|
QToolButton* refreshToolButton = new QToolButton(tabWidget);
|
2022-02-09 11:59:14 -06:00
|
|
|
refreshToolButton->setIcon(QIcon(":/seer/resources/RelaxLightIcons/view-refresh.svg"));
|
2021-09-01 14:01:00 -05:00
|
|
|
refreshToolButton->setToolTip("Refresh the stack information.");
|
|
|
|
|
tabWidget->setCornerWidget(refreshToolButton, Qt::TopRightCorner);
|
|
|
|
|
|
|
|
|
|
// Connect things.
|
2022-09-13 16:59:22 -05:00
|
|
|
QObject::connect(refreshToolButton, &QToolButton::clicked, this, &SeerStackManagerWidget::handleRefreshToolButtonClicked);
|
2021-09-01 14:01:00 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SeerStackManagerWidget::~SeerStackManagerWidget () {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SeerStackFramesBrowserWidget* SeerStackManagerWidget::stackFramesBrowserWidget () {
|
|
|
|
|
return _stackFramesBrowserWidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SeerStackArgumentsBrowserWidget* SeerStackManagerWidget::stackArgumentsBrowserWidget () {
|
|
|
|
|
return _stackArgumentsBrowserWidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SeerStackLocalsBrowserWidget* SeerStackManagerWidget::stackLocalsBrowserWidget () {
|
|
|
|
|
return _stackLocalsBrowserWidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerStackManagerWidget::handleRefreshToolButtonClicked () {
|
|
|
|
|
|
|
|
|
|
stackFramesBrowserWidget()->refresh();
|
|
|
|
|
stackArgumentsBrowserWidget()->refresh();
|
|
|
|
|
stackLocalsBrowserWidget()->refresh();
|
2021-11-07 13:53:46 -06:00
|
|
|
|
|
|
|
|
refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerStackManagerWidget::handleText (const QString& text) {
|
|
|
|
|
|
|
|
|
|
// Don't do any work if the widget is hidden.
|
|
|
|
|
if (isHidden()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QApplication::setOverrideCursor(Qt::BusyCursor);
|
|
|
|
|
|
|
|
|
|
if (text.startsWith("^done,thread-ids={")) {
|
|
|
|
|
|
|
|
|
|
QString newtext = Seer::filterEscapes(text); // Filter escaped characters.
|
|
|
|
|
|
|
|
|
|
// ^done,thread-ids={
|
|
|
|
|
// thread-id=\"1\",
|
|
|
|
|
// thread-id=\"2\"
|
|
|
|
|
// },
|
|
|
|
|
// current-thread-id=\"1\",
|
|
|
|
|
// number-of-threads=\"2\"
|
|
|
|
|
|
|
|
|
|
QString currentthreadid_text = Seer::parseFirst(newtext, "current-thread-id=", '"', '"', false);
|
|
|
|
|
|
|
|
|
|
groupBox->setTitle("Stack Info for Thread Id : " + currentthreadid_text);
|
|
|
|
|
|
|
|
|
|
}else if (text.startsWith("^error,msg=\"No registers.\"")) {
|
|
|
|
|
|
|
|
|
|
groupBox->setTitle("Stack Info");
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
// Ignore others.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QApplication::restoreOverrideCursor();
|
2021-09-01 14:01:00 -05:00
|
|
|
}
|
|
|
|
|
|
2021-11-07 13:53:46 -06:00
|
|
|
void SeerStackManagerWidget::handleStoppingPointReached () {
|
|
|
|
|
|
|
|
|
|
// Don't do any work if the widget is hidden.
|
|
|
|
|
if (isHidden()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerStackManagerWidget::refresh () {
|
|
|
|
|
|
|
|
|
|
emit refreshThreadFrames();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|