Browse Source

Use external debugger.

cl-refactor
Gav Wood 10 years ago
parent
commit
0066771e3b
  1. 30
      alethzero/Debugger.cpp
  2. 19
      alethzero/Debugger.h
  3. 76
      alethzero/Debugger.ui
  4. 11
      alethzero/MainWin.cpp

30
alethzero/Debugger.cpp

@ -266,28 +266,28 @@ void Debugger::on_debugTimeline_valueChanged()
update();
}
void Debugger::on_stepOver_triggered()
void Debugger::on_stepOver_clicked()
{
if (ui->debugTimeline->value() < m_session.history.size()) {
auto l = m_session.history[ui->debugTimeline->value()].levels.size();
if ((ui->debugTimeline->value() + 1) < m_session.history.size() && m_session.history[ui->debugTimeline->value() + 1].levels.size() > l)
{
on_stepInto_triggered();
on_stepInto_clicked();
if (m_session.history[ui->debugTimeline->value()].levels.size() > l)
on_stepOut_triggered();
on_stepOut_clicked();
}
else
on_stepInto_triggered();
on_stepInto_clicked();
}
}
void Debugger::on_stepInto_triggered()
void Debugger::on_stepInto_clicked()
{
ui->debugTimeline->setValue(ui->debugTimeline->value() + 1);
ui->callStack->setCurrentRow(0);
}
void Debugger::on_stepOut_triggered()
void Debugger::on_stepOut_clicked()
{
if (ui->debugTimeline->value() < m_session.history.size())
{
@ -299,26 +299,26 @@ void Debugger::on_stepOut_triggered()
}
}
void Debugger::on_backInto_triggered()
void Debugger::on_backInto_clicked()
{
ui->debugTimeline->setValue(ui->debugTimeline->value() - 1);
ui->callStack->setCurrentRow(0);
}
void Debugger::on_backOver_triggered()
void Debugger::on_backOver_clicked()
{
auto l = m_session.history[ui->debugTimeline->value()].levels.size();
if (ui->debugTimeline->value() > 0 && m_session.history[ui->debugTimeline->value() - 1].levels.size() > l)
{
on_backInto_triggered();
on_backInto_clicked();
if (m_session.history[ui->debugTimeline->value()].levels.size() > l)
on_backOut_triggered();
on_backOut_clicked();
}
else
on_backInto_triggered();
on_backInto_clicked();
}
void Debugger::on_backOut_triggered()
void Debugger::on_backOut_clicked()
{
if (ui->debugTimeline->value() > 0 && m_session.history.size() > 0)
{
@ -330,7 +330,7 @@ void Debugger::on_backOut_triggered()
}
}
void Debugger::on_dump_triggered()
void Debugger::on_dump_clicked()
{
QString fn = QFileDialog::getSaveFileName(this, "Select file to output EVM trace");
ofstream f(fn.toStdString());
@ -339,7 +339,7 @@ void Debugger::on_dump_triggered()
f << ws.cur << " " << hex << toHex(dev::toCompactBigEndian(ws.curPC, 1)) << " " << hex << toHex(dev::toCompactBigEndian((int)(byte)ws.inst, 1)) << " " << hex << toHex(dev::toCompactBigEndian((uint64_t)ws.gas, 1)) << endl;
}
void Debugger::on_dumpPretty_triggered()
void Debugger::on_dumpPretty_clicked()
{
QString fn = QFileDialog::getSaveFileName(this, "Select file to output EVM trace");
ofstream f(fn.toStdString());
@ -357,7 +357,7 @@ void Debugger::on_dumpPretty_triggered()
}
}
void Debugger::on_dumpStorage_triggered()
void Debugger::on_dumpStorage_clicked()
{
QString fn = QFileDialog::getSaveFileName(this, "Select file to output EVM trace");
ofstream f(fn.toStdString());

19
alethzero/Debugger.h

@ -78,15 +78,16 @@ public:
protected slots:
void on_callStack_currentItemChanged();
void on_debugTimeline_valueChanged();
void on_stepOver_triggered();
void on_stepInto_triggered();
void on_stepOut_triggered();
void on_backOver_triggered();
void on_backInto_triggered();
void on_backOut_triggered();
void on_dump_triggered();
void on_dumpPretty_triggered();
void on_dumpStorage_triggered();
void on_stepOver_clicked();
void on_stepInto_clicked();
void on_stepOut_clicked();
void on_backOver_clicked();
void on_backInto_clicked();
void on_backOut_clicked();
void on_dump_clicked();
void on_dumpPretty_clicked();
void on_dumpStorage_clicked();
void on_close_clicked() { close(); }
private:
void init();

76
alethzero/Debugger.ui

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>946</width>
<width>989</width>
<height>690</height>
</rect>
</property>
@ -65,27 +65,6 @@
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="dump">
<property name="text">
<string>Dump</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="dumpPretty">
<property name="text">
<string>Dump Pretty</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="dumpStorage">
<property name="text">
<string>Dump Storage</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
@ -231,6 +210,59 @@
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QToolButton" name="dump">
<property name="text">
<string>Dump</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="dumpStorage">
<property name="text">
<string>Dump Storage</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="dumpPretty">
<property name="text">
<string>Dump Pretty</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>577</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="close">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>

11
alethzero/MainWin.cpp

@ -1999,14 +1999,19 @@ void Main::on_debug_clicked()
if (ethereum()->balanceAt(i.address()) >= totalReq)
{
Secret s = i.secret();
m_executiveState = ethereum()->postState();
m_currentExecution = unique_ptr<Executive>(new Executive(m_executiveState, ethereum()->blockChain(), 0));
Transaction t = isCreation() ?
Transaction(value(), gasPrice(), ui->gas->value(), m_data, m_executiveState.transactionsFrom(dev::toAddress(s)), s) :
Transaction(value(), gasPrice(), ui->gas->value(), fromString(ui->destination->currentText()), m_data, m_executiveState.transactionsFrom(dev::toAddress(s)), s);
auto r = t.rlp();
Debugger dw(this, this);
Executive e(m_executiveState, ethereum()->blockChain(), 0);
dw.populate(e, &r);
dw.exec();
/*m_executiveState = ethereum()->postState();
m_currentExecution = unique_ptr<Executive>(new Executive(m_executiveState, ethereum()->blockChain(), 0));
populateDebugger(&r);
m_currentExecution.reset();
m_currentExecution.reset();*/
return;
}
statusBar()->showMessage("Couldn't make transaction: no single account contains at least the required amount.");

Loading…
Cancel
Save