36 QJsonObject event, body, script;
37 event.insert(QStringLiteral(
"type"), QStringLiteral(
"event"));
43 event.insert(QStringLiteral(
"event"), QStringLiteral(
"break"));
44 QV4::CppStackFrame *frame = debugger->engine()->currentStackFrame;
48 body.insert(QStringLiteral(
"invocationText"), frame->function());
49 body.insert(QStringLiteral(
"sourceLine"), qAbs(frame->lineNumber()) - 1);
52 QJsonArray breakPoints;
53 const QList<
int> ids = breakPointIds(frame->source(), frame->lineNumber());
54 for (
int breakPointId : ids)
55 breakPoints.push_back(breakPointId);
56 body.insert(QStringLiteral(
"breakpoints"), breakPoints);
57 script.insert(QStringLiteral(
"name"), frame->source());
61 event.insert(QStringLiteral(
"event"), QStringLiteral(
"exception"));
65 if (!script.isEmpty())
66 body.insert(QStringLiteral(
"script"), script);
68 event.insert(QStringLiteral(
"body"), body);
69 m_debugService->send(event);
74 Q_ASSERT(!m_debuggers.contains(debugger));
75 m_debuggers << debugger;
79 for (
const BreakPoint &breakPoint : std::as_const(m_breakPoints))
80 if (breakPoint.enabled)
81 debugger->addBreakPoint(breakPoint.fileName, breakPoint.lineNr, breakPoint.condition);
83 connect(debugger, &QObject::destroyed,
this, &QV4DebuggerAgent::handleDebuggerDeleted);
84 connect(debugger, &QV4Debugger::debuggerPaused,
this, &QV4DebuggerAgent::debuggerPaused,
85 Qt::QueuedConnection);
90 m_debuggers.removeAll(debugger);
91 disconnect(debugger, &QObject::destroyed,
this, &QV4DebuggerAgent::handleDebuggerDeleted);
92 disconnect(debugger, &QV4Debugger::debuggerPaused,
this, &QV4DebuggerAgent::debuggerPaused);
126 for (QV4Debugger *debugger : std::as_const(m_debuggers))
127 debugger->addBreakPoint(fileName, lineNumber, condition);
130 const int id = ++m_lastBreakPointId;
131 m_breakPoints.insert(id, BreakPoint(fileName, lineNumber, enabled, condition));
156 BreakPoint &breakPoint = m_breakPoints[id];
157 if (!breakPoint.isValid() || breakPoint.enabled == onoff)
159 breakPoint.enabled = onoff;
161 for (QV4Debugger *debugger : std::as_const(m_debuggers)) {
163 debugger->addBreakPoint(breakPoint.fileName, breakPoint.lineNr, breakPoint.condition);
165 debugger->removeBreakPoint(breakPoint.fileName, breakPoint.lineNr);