forked from qt-creator/qt-creator
91 lines
2.3 KiB
C++
91 lines
2.3 KiB
C++
#include "mainwindow.h"
|
|
#include <QFileDialog>
|
|
#include <QTextStream>
|
|
#include <QDebug>
|
|
|
|
MainWindow::MainWindow()
|
|
: QMainWindow(0, 0)
|
|
{
|
|
setupUi(this);
|
|
|
|
connect(&m_debugger, SIGNAL(debugOutput(const QString&)), SLOT(appendOutput(const QString&)));
|
|
connect(&m_debugger, SIGNAL(debuggeePaused()), SLOT(onDebuggeePaused()));
|
|
}
|
|
|
|
void MainWindow::setDebuggee(const QString& filename)
|
|
{
|
|
m_debugger.openProcess(filename);
|
|
}
|
|
|
|
void MainWindow::on_actionOpen_triggered()
|
|
{
|
|
QString exeName;
|
|
exeName = QFileDialog::getOpenFileName(this, "Open Executable", ".", "*.exe");
|
|
if (!exeName.isNull())
|
|
m_debugger.openProcess(exeName);
|
|
}
|
|
|
|
void MainWindow::on_actionExit_triggered()
|
|
{
|
|
close();
|
|
}
|
|
|
|
void MainWindow::on_actionBreak_triggered()
|
|
{
|
|
m_debugger.breakAtCurrentPosition();
|
|
}
|
|
|
|
void MainWindow::on_actionRun_triggered()
|
|
{
|
|
m_debugger.continueProcess();
|
|
}
|
|
|
|
void MainWindow::on_lstStack_itemClicked(QListWidgetItem* item)
|
|
{
|
|
Debugger::StackFrame sf = m_stackTrace[ lstStack->row(item) ];
|
|
QFile f(sf.filename);
|
|
if (!f.exists())
|
|
return;
|
|
|
|
f.open(QFile::ReadOnly);
|
|
QTextStream ts(&f);
|
|
int cursorPos = 0;
|
|
int currentLine = 0;
|
|
QString fullText;
|
|
do {
|
|
QString strLine = ts.readLine();
|
|
currentLine++;
|
|
if (currentLine < sf.line)
|
|
cursorPos += strLine.length();
|
|
fullText.append(strLine + "\n");
|
|
} while (!ts.atEnd());
|
|
codeWindow->setPlainText(fullText);
|
|
|
|
//QList<QTextEdit::ExtraSelection> extraSelections;
|
|
//extraSelections.append(QTextEdit::ExtraSelection());
|
|
|
|
//QTextEdit::ExtraSelection& exsel = extraSelections.first();
|
|
//exsel.cursor.setPosition(cursorPos, QTextCursor::MoveAnchor);
|
|
//exsel.cursor.select(QTextCursor::LineUnderCursor);
|
|
//exsel.format.setBackground(Qt::red);
|
|
//exsel.format.setFontUnderline(true);
|
|
//codeWindow->setExtraSelections(extraSelections);
|
|
}
|
|
|
|
void MainWindow::appendOutput(const QString& str)
|
|
{
|
|
teOutput->setPlainText(teOutput->toPlainText() + str);
|
|
}
|
|
|
|
void MainWindow::onDebuggeePaused()
|
|
{
|
|
lstStack->clear();
|
|
m_stackTrace = m_debugger.stackTrace();
|
|
foreach (Debugger::StackFrame sf, m_stackTrace) {
|
|
QString str = sf.symbol;
|
|
if (!sf.filename.isEmpty())
|
|
str.append(" at " + sf.filename + ":" + QString::number(sf.line));
|
|
lstStack->addItem(str);
|
|
}
|
|
}
|