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

Unified Diff: src/inspector/v8-debugger-agent-impl.cc

Issue 2879923003: [inspector] added targetCallFrames for continueToLocation (Closed)
Patch Set: Created 3 years, 7 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
Index: src/inspector/v8-debugger-agent-impl.cc
diff --git a/src/inspector/v8-debugger-agent-impl.cc b/src/inspector/v8-debugger-agent-impl.cc
index 8af7d5243418c7e559b1b5ce5d7fa2087d9a1217..7064ae95ee8b526833244781f3018efce3a8ac46 100644
--- a/src/inspector/v8-debugger-agent-impl.cc
+++ b/src/inspector/v8-debugger-agent-impl.cc
@@ -247,7 +247,7 @@ Response V8DebuggerAgentImpl::disable() {
m_scripts.clear();
m_breakpointIdToDebuggerBreakpointIds.clear();
m_debugger->setAsyncCallStackDepth(this, 0);
- m_continueToLocationBreakpointId = String16();
+ clearContinueToLocation();
clearBreakDetails();
m_skipAllPauses = false;
m_state->setBoolean(DebuggerAgentState::skipAllPauses, false);
@@ -484,12 +484,11 @@ Response V8DebuggerAgentImpl::getPossibleBreakpoints(
}
Response V8DebuggerAgentImpl::continueToLocation(
- std::unique_ptr<protocol::Debugger::Location> location) {
+ std::unique_ptr<protocol::Debugger::Location> location,
+ Maybe<String16> strategy) {
if (!enabled()) return Response::Error(kDebuggerNotEnabled);
- if (!m_continueToLocationBreakpointId.isEmpty()) {
- m_debugger->removeBreakpoint(m_continueToLocationBreakpointId);
- m_continueToLocationBreakpointId = "";
- }
+ if (!isPaused()) return Response::Error(kDebuggerNotPaused);
+ clearContinueToLocation();
ScriptBreakpoint breakpoint(location->getScriptId(),
location->getLineNumber(),
@@ -497,10 +496,31 @@ Response V8DebuggerAgentImpl::continueToLocation(
m_continueToLocationBreakpointId = m_debugger->setBreakpoint(
breakpoint, &breakpoint.line_number, &breakpoint.column_number);
+ if (m_continueToLocationBreakpointId.isEmpty()) {
+ return Response::Error("Location can't be resolved");
+ }
+ m_continueToLocationStrategy = strategy.fromMaybe(
+ protocol::Debugger::ContinueToLocation::StrategyEnum::Default);
+ if (m_continueToLocationStrategy !=
+ protocol::Debugger::ContinueToLocation::StrategyEnum::Default) {
+ m_continueToLocationStack = m_debugger->captureStackTrace(true);
+ if (m_continueToLocationStack) {
+ m_continueToLocationStrategy =
+ protocol::Debugger::ContinueToLocation::StrategyEnum::Default;
+ }
+ }
// TODO(kozyatinskiy): Return actual line and column number.
return resume();
}
+void V8DebuggerAgentImpl::clearContinueToLocation() {
+ if (m_continueToLocationBreakpointId.isEmpty()) return;
+ m_debugger->removeBreakpoint(m_continueToLocationBreakpointId);
+ m_continueToLocationBreakpointId = String16();
+ m_continueToLocationStrategy = String16();
+ m_continueToLocationStack.reset();
+}
+
bool V8DebuggerAgentImpl::isFunctionBlackboxed(const String16& scriptId,
const v8::debug::Location& start,
const v8::debug::Location& end) {
@@ -1144,6 +1164,23 @@ void V8DebuggerAgentImpl::didParseSource(
}
}
+bool V8DebuggerAgentImpl::shouldIgnoreContinueToLocation(
+ const String16& breakpointId) {
+ if (breakpointId != m_continueToLocationBreakpointId) return false;
+ if (m_continueToLocationStrategy ==
+ protocol::Debugger::ContinueToLocation::StrategyEnum::Default) {
+ return false;
+ }
+ std::unique_ptr<V8StackTraceImpl> currentStack =
+ m_debugger->captureStackTrace(true);
+ if (m_continueToLocationStrategy ==
+ protocol::Debugger::ContinueToLocation::StrategyEnum::InCurrentFrame) {
+ return !m_continueToLocationStack->isEqualIgnoringTopFrame(
+ currentStack.get());
+ }
+ return false;
+}
+
void V8DebuggerAgentImpl::didPause(int contextId,
v8::Local<v8::Value> exception,
const std::vector<String16>& hitBreakpoints,
@@ -1234,10 +1271,7 @@ void V8DebuggerAgentImpl::didPause(int contextId,
std::move(breakAuxData), std::move(hitBreakpointIds),
currentAsyncStackTrace());
- if (!m_continueToLocationBreakpointId.isEmpty()) {
- m_debugger->removeBreakpoint(m_continueToLocationBreakpointId);
- m_continueToLocationBreakpointId = "";
- }
+ clearContinueToLocation();
}
void V8DebuggerAgentImpl::didContinue() {

Powered by Google App Engine
This is Rietveld 408576698