void TermGdbAdapter::handleEntryPoint(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { GdbMi stack = response.data.findChild("stack"); if (stack.isValid() && stack.childCount() == 1) m_engine->m_entryPoint = stack.childAt(0).findChild("addr").data(); } }
void StackHandler::setFramesAndCurrentIndex(const GdbMi &frames, bool isFull) { int targetFrame = -1; StackFrames stackFrames; const int n = frames.childCount(); for (int i = 0; i != n; ++i) { stackFrames.append(StackFrame::parseFrame(frames.childAt(i), m_engine->runParameters())); const StackFrame &frame = stackFrames.back(); // Initialize top frame to the first valid frame. const bool isValid = frame.isUsable() && !frame.function.isEmpty(); if (isValid && targetFrame == -1) targetFrame = i; } bool canExpand = !isFull && (n >= action(MaximalStackDepth)->value().toInt()); action(ExpandStack)->setEnabled(canExpand); setFrames(stackFrames, canExpand); // We can't jump to any file if we don't have any frames. if (stackFrames.isEmpty()) return; // targetFrame contains the top most frame for which we have source // information. That's typically the frame we'd like to jump to, with // a few exceptions: // Always jump to frame #0 when stepping by instruction. if (m_engine->operatesByInstruction()) targetFrame = 0; // If there is no frame with source, jump to frame #0. if (targetFrame == -1) targetFrame = 0; setCurrentIndex(targetFrame); }