Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1295)

Unified Diff: Source/core/inspector/InspectorDebuggerAgent.cpp

Issue 14294004: Implementing console command 'debug'. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/inspector/InspectorDebuggerAgent.h ('k') | Source/devtools/front_end/DebuggerModel.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/inspector/InspectorDebuggerAgent.cpp
diff --git a/Source/core/inspector/InspectorDebuggerAgent.cpp b/Source/core/inspector/InspectorDebuggerAgent.cpp
index 9f54a015db229aeab8f65dae12c74cb665b2421f..7e0a7b0c0325657d61ba49114615dc17ac0bd70b 100644
--- a/Source/core/inspector/InspectorDebuggerAgent.cpp
+++ b/Source/core/inspector/InspectorDebuggerAgent.cpp
@@ -63,6 +63,12 @@ static const char pauseOnExceptionsState[] = "pauseOnExceptionsState";
const char* InspectorDebuggerAgent::backtraceObjectGroup = "backtrace";
+static String generateBreakpointId(const String& scriptId, int lineNumber, int columnNumber, InspectorDebuggerAgent::BreakpointSource source)
+{
+ return scriptId + ':' + String::number(lineNumber) + ':' + String::number(columnNumber) +
+ (source == InspectorDebuggerAgent::UserBreakpointSource ? String() : String(":debug"));
+}
+
InspectorDebuggerAgent::InspectorDebuggerAgent(InstrumentingAgents* instrumentingAgents, InspectorCompositeState* inspectorState, InjectedScriptManager* injectedScriptManager)
: InspectorBaseAgent<InspectorDebuggerAgent>("Debugger", instrumentingAgents, inspectorState)
, m_injectedScriptManager(injectedScriptManager)
@@ -243,7 +249,7 @@ void InspectorDebuggerAgent::setBreakpointByUrl(ErrorString* errorString, int li
for (ScriptsMap::iterator it = m_scripts.begin(); it != m_scripts.end(); ++it) {
if (!matches(it->value.url, url, isRegex))
continue;
- RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(breakpointId, it->key, breakpoint);
+ RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(breakpointId, it->key, breakpoint, UserBreakpointSource);
if (location)
locations->addItem(location);
}
@@ -273,13 +279,13 @@ void InspectorDebuggerAgent::setBreakpoint(ErrorString* errorString, const RefPt
String condition = optionalCondition ? *optionalCondition : emptyString();
- String breakpointId = scriptId + ':' + String::number(lineNumber) + ':' + String::number(columnNumber);
+ String breakpointId = generateBreakpointId(scriptId, lineNumber, columnNumber, UserBreakpointSource);
if (m_breakpointIdToDebugServerBreakpointIds.find(breakpointId) != m_breakpointIdToDebugServerBreakpointIds.end()) {
*errorString = "Breakpoint at specified location already exists.";
return;
}
ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition);
- actualLocation = resolveBreakpoint(breakpointId, scriptId, breakpoint);
+ actualLocation = resolveBreakpoint(breakpointId, scriptId, breakpoint, UserBreakpointSource);
if (actualLocation)
*outBreakpointId = breakpointId;
else
@@ -292,12 +298,18 @@ void InspectorDebuggerAgent::removeBreakpoint(ErrorString*, const String& breakp
breakpointsCookie->remove(breakpointId);
m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, breakpointsCookie);
+ removeBreakpoint(breakpointId);
+}
+
+void InspectorDebuggerAgent::removeBreakpoint(const String& breakpointId)
+{
BreakpointIdToDebugServerBreakpointIdsMap::iterator debugServerBreakpointIdsIterator = m_breakpointIdToDebugServerBreakpointIds.find(breakpointId);
if (debugServerBreakpointIdsIterator == m_breakpointIdToDebugServerBreakpointIds.end())
return;
for (size_t i = 0; i < debugServerBreakpointIdsIterator->value.size(); ++i) {
- scriptDebugServer().removeBreakpoint(debugServerBreakpointIdsIterator->value[i]);
- m_serverBreakpointIdToBreakpointId.remove(debugServerBreakpointIdsIterator->value[i]);
+ const String& debugServerBreakpointId = debugServerBreakpointIdsIterator->value[i];
+ scriptDebugServer().removeBreakpoint(debugServerBreakpointId);
+ m_serverBreakpoints.remove(debugServerBreakpointId);
}
m_breakpointIdToDebugServerBreakpointIds.remove(debugServerBreakpointIdsIterator);
}
@@ -321,7 +333,7 @@ void InspectorDebuggerAgent::continueToLocation(ErrorString* errorString, const
resume(errorString);
}
-PassRefPtr<TypeBuilder::Debugger::Location> InspectorDebuggerAgent::resolveBreakpoint(const String& breakpointId, const String& scriptId, const ScriptBreakpoint& breakpoint)
+PassRefPtr<TypeBuilder::Debugger::Location> InspectorDebuggerAgent::resolveBreakpoint(const String& breakpointId, const String& scriptId, const ScriptBreakpoint& breakpoint, BreakpointSource source)
{
ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId);
if (scriptIterator == m_scripts.end())
@@ -336,7 +348,7 @@ PassRefPtr<TypeBuilder::Debugger::Location> InspectorDebuggerAgent::resolveBreak
if (debugServerBreakpointId.isEmpty())
return 0;
- m_serverBreakpointIdToBreakpointId.set(debugServerBreakpointId, breakpointId);
+ m_serverBreakpoints.set(debugServerBreakpointId, std::make_pair(breakpointId, source));
BreakpointIdToDebugServerBreakpointIdsMap::iterator debugServerBreakpointIdsIterator = m_breakpointIdToDebugServerBreakpointIds.find(breakpointId);
if (debugServerBreakpointIdsIterator == m_breakpointIdToDebugServerBreakpointIds.end())
@@ -694,7 +706,7 @@ void InspectorDebuggerAgent::didParseSource(const String& scriptId, const Script
breakpointObject->getNumber("lineNumber", &breakpoint.lineNumber);
breakpointObject->getNumber("columnNumber", &breakpoint.columnNumber);
breakpointObject->getString("condition", &breakpoint.condition);
- RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(it->key, scriptId, breakpoint);
+ RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(it->key, scriptId, breakpoint, UserBreakpointSource);
if (location)
m_frontend->breakpointResolved(it->key, location);
}
@@ -723,9 +735,15 @@ void InspectorDebuggerAgent::didPause(ScriptState* scriptState, const ScriptValu
RefPtr<Array<String> > hitBreakpointIds = Array<String>::create();
for (Vector<String>::const_iterator i = hitBreakpoints.begin(); i != hitBreakpoints.end(); ++i) {
- DebugServerBreakpointIdToBreakpointIdMap::iterator breakpointIterator = m_serverBreakpointIdToBreakpointId.find(*i);
- if (breakpointIterator != m_serverBreakpointIdToBreakpointId.end())
- hitBreakpointIds->addItem(breakpointIterator->value);
+ DebugServerBreakpointToBreakpointIdAndSourceMap::iterator breakpointIterator = m_serverBreakpoints.find(*i);
+ if (breakpointIterator != m_serverBreakpoints.end()) {
+ const String& localId = breakpointIterator->value.first;
+ hitBreakpointIds->addItem(localId);
+
+ BreakpointSource source = breakpointIterator->value.second;
+ if (m_breakReason == InspectorFrontend::Debugger::Reason::Other && source == DebugCommandBreakpointSource)
+ m_breakReason = InspectorFrontend::Debugger::Reason::DebugCommand;
+ }
}
m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBreakpointIds);
@@ -805,6 +823,18 @@ void ScriptDebugListener::Script::reportMemoryUsage(MemoryObjectInfo* memoryObje
info.addMember(sourceMappingURL, "sourceMappingURL");
}
+void InspectorDebuggerAgent::setBreakpoint(const String& scriptId, int lineNumber, int columnNumber, BreakpointSource source)
+{
+ String breakpointId = generateBreakpointId(scriptId, lineNumber, columnNumber, source);
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, String());
+ resolveBreakpoint(breakpointId, scriptId, breakpoint, source);
+}
+
+void InspectorDebuggerAgent::removeBreakpoint(const String& scriptId, int lineNumber, int columnNumber, BreakpointSource source)
+{
+ removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, source));
+}
+
void InspectorDebuggerAgent::reset()
{
m_scripts.clear();
« no previous file with comments | « Source/core/inspector/InspectorDebuggerAgent.h ('k') | Source/devtools/front_end/DebuggerModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698