void GdbDebugger::handleResultStackListFrame(const GdbResponse &response, QMap<QString,QVariant> &map) { //10000015^done,stack=[frame={level="0",addr="0x0040113f",func="main.main",file="F:/hg/debug_test/hello/main.go",fullname="F:/hg/debug_test/hello/main.go",line="36"},frame={level="1",addr="0x00401f8a",func="runtime.mainstart",file="386/asm.s",fullname="c:/go/src/pkg/runtime/386/asm.s",line="96"},frame={level="2",addr="0x0040bcfe",func="runtime.initdone",file="/go/src/pkg/runtime/proc.c",fullname="c:/go/src/pkg/runtime/proc.c",line="242"},frame={level="3",addr="0x00000000",func="??"}] m_framesModel->removeRows(0,m_framesModel->rowCount()); if (response.resultClass != GdbResultDone) { return; } GdbMiValue stack = response.data.findChild("stack"); if (stack.isList()) { for (int i = 0; i < stack.childCount(); i++) { GdbMiValue child = stack.childAt(i); if (child.isValid() && child.name() == "frame") { QString level = child.findChild("level").data(); QString addr = child.findChild("addr").data(); QString func = child.findChild("func").data(); QString file = child.findChild("file").data(); QString line = child.findChild("line").data(); m_framesModel->appendRow(QList<QStandardItem*>() << new QStandardItem(level) << new QStandardItem(addr) << new QStandardItem(func) << new QStandardItem(file) << new QStandardItem(line) ); } } } }
void GdbDebugger::handleStopped(const GdbMiValue &result) { QByteArray reason = result.findChild("reason").data(); m_handleState.setReason(reason); m_handleState.setStopped(true); if (reason.startsWith("exited")) { m_handleState.setExited(true); m_handleState.setReason(reason); return; } GdbMiValue frame = result.findChild("frame"); if (frame.isValid()) { QString fullname = frame.findChild("fullname").data(); QString file = frame.findChild("file").data(); QString line = frame.findChild("line").data(); if (!fullname.isEmpty()) { emit setCurrentLine(fullname,line.toInt()-1); } else if (!file.isEmpty()) { //fix go build bug, not find fullname //file="C:/Users/ADMINI~1/AppData/Local/Temp/2/bindist308287094/go/src/pkg/fmt/print.go" int i = file.indexOf("/go/src/pkg"); if (i > 0) { QString fullname = LiteApi::getGoroot(m_liteApp)+file.right(file.length()-i-3); emit setCurrentLine(fullname,line.toInt()-1); } } } }
void GdbDebugger::handleLibrary(const GdbMiValue &result) { QString id = result.findChild("id").data(); QString thread_group = result.findChild("thread-group").data(); m_libraryModel->appendRow(QList<QStandardItem*>() << new QStandardItem(id) << new QStandardItem(thread_group) ); }