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

Side by Side Diff: src/debug/debug.cc

Issue 2619353006: Refactor FrameSummary for JS and Wasm frames (Closed)
Patch Set: Address comment Created 3 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/debug/debug-frames.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/debug/debug.h" 5 #include "src/debug/debug.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 debug_info_list_(NULL), 55 debug_info_list_(NULL),
56 feature_tracker_(isolate), 56 feature_tracker_(isolate),
57 isolate_(isolate) { 57 isolate_(isolate) {
58 ThreadInit(); 58 ThreadInit();
59 } 59 }
60 60
61 BreakLocation BreakLocation::FromFrame(Handle<DebugInfo> debug_info, 61 BreakLocation BreakLocation::FromFrame(Handle<DebugInfo> debug_info,
62 JavaScriptFrame* frame) { 62 JavaScriptFrame* frame) {
63 FrameSummary summary = FrameSummary::GetFirst(frame); 63 FrameSummary summary = FrameSummary::GetFirst(frame);
64 int offset = summary.code_offset(); 64 int offset = summary.code_offset();
65 Handle<AbstractCode> abstract_code = summary.abstract_code(); 65 Handle<AbstractCode> abstract_code = summary.AsJavaScript().abstract_code();
66 if (abstract_code->IsCode()) offset = offset - 1; 66 if (abstract_code->IsCode()) offset = offset - 1;
67 auto it = BreakIterator::GetIterator(debug_info, abstract_code); 67 auto it = BreakIterator::GetIterator(debug_info, abstract_code);
68 it->SkipTo(BreakIndexFromCodeOffset(debug_info, abstract_code, offset)); 68 it->SkipTo(BreakIndexFromCodeOffset(debug_info, abstract_code, offset));
69 return it->GetBreakLocation(); 69 return it->GetBreakLocation();
70 } 70 }
71 71
72 void BreakLocation::AllAtCurrentStatement(Handle<DebugInfo> debug_info, 72 void BreakLocation::AllAtCurrentStatement(Handle<DebugInfo> debug_info,
73 JavaScriptFrame* frame, 73 JavaScriptFrame* frame,
74 List<BreakLocation>* result_out) { 74 List<BreakLocation>* result_out) {
75 FrameSummary summary = FrameSummary::GetFirst(frame); 75 auto summary = FrameSummary::GetFirst(frame).AsJavaScript();
76 int offset = summary.code_offset(); 76 int offset = summary.code_offset();
77 Handle<AbstractCode> abstract_code = summary.abstract_code(); 77 Handle<AbstractCode> abstract_code = summary.abstract_code();
78 if (abstract_code->IsCode()) offset = offset - 1; 78 if (abstract_code->IsCode()) offset = offset - 1;
79 int statement_position; 79 int statement_position;
80 { 80 {
81 auto it = BreakIterator::GetIterator(debug_info, abstract_code); 81 auto it = BreakIterator::GetIterator(debug_info, abstract_code);
82 it->SkipTo(BreakIndexFromCodeOffset(debug_info, abstract_code, offset)); 82 it->SkipTo(BreakIndexFromCodeOffset(debug_info, abstract_code, offset));
83 statement_position = it->statement_position(); 83 statement_position = it->statement_position();
84 } 84 }
85 for (auto it = BreakIterator::GetIterator(debug_info, abstract_code); 85 for (auto it = BreakIterator::GetIterator(debug_info, abstract_code);
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 step_break = true; 551 step_break = true;
552 break; 552 break;
553 case StepNext: 553 case StepNext:
554 // Step next should not break in a deeper frame. 554 // Step next should not break in a deeper frame.
555 if (current_fp < target_fp) return; 555 if (current_fp < target_fp) return;
556 // For step-next, a tail call is like a return and should break. 556 // For step-next, a tail call is like a return and should break.
557 step_break = location.IsTailCall(); 557 step_break = location.IsTailCall();
558 // Fall through. 558 // Fall through.
559 case StepIn: { 559 case StepIn: {
560 FrameSummary summary = FrameSummary::GetFirst(frame); 560 FrameSummary summary = FrameSummary::GetFirst(frame);
561 int offset = summary.code_offset(); 561 step_break = step_break || location.IsReturn() || current_fp != last_fp ||
562 step_break = step_break || location.IsReturn() || 562 thread_local_.last_statement_position_ !=
563 (current_fp != last_fp) || 563 summary.SourceStatementPosition();
564 (thread_local_.last_statement_position_ !=
565 summary.abstract_code()->SourceStatementPosition(offset));
566 break; 564 break;
567 } 565 }
568 case StepFrame: 566 case StepFrame:
569 step_break = current_fp != last_fp; 567 step_break = current_fp != last_fp;
570 break; 568 break;
571 } 569 }
572 570
573 // Clear all current stepping setup. 571 // Clear all current stepping setup.
574 ClearStepping(); 572 ClearStepping();
575 573
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 // Step out: Find the calling JavaScript frame and flood it with 991 // Step out: Find the calling JavaScript frame and flood it with
994 // breakpoints. 992 // breakpoints.
995 frames_it.Advance(); 993 frames_it.Advance();
996 // Fill the function to return to with one-shot break points. 994 // Fill the function to return to with one-shot break points.
997 JSFunction* function = frames_it.frame()->function(); 995 JSFunction* function = frames_it.frame()->function();
998 FloodWithOneShot(Handle<JSFunction>(function)); 996 FloodWithOneShot(Handle<JSFunction>(function));
999 return; 997 return;
1000 } 998 }
1001 999
1002 // Get the debug info (create it if it does not exist). 1000 // Get the debug info (create it if it does not exist).
1003 FrameSummary summary = FrameSummary::GetFirst(frame); 1001 auto summary = FrameSummary::GetFirst(frame).AsJavaScript();
1004 Handle<JSFunction> function(summary.function()); 1002 Handle<JSFunction> function(summary.function());
1005 Handle<SharedFunctionInfo> shared(function->shared()); 1003 Handle<SharedFunctionInfo> shared(function->shared());
1006 if (!EnsureDebugInfo(shared, function)) { 1004 if (!EnsureDebugInfo(shared, function)) {
1007 // Return if ensuring debug info failed. 1005 // Return if ensuring debug info failed.
1008 return; 1006 return;
1009 } 1007 }
1010 1008
1011 Handle<DebugInfo> debug_info(shared->GetDebugInfo()); 1009 Handle<DebugInfo> debug_info(shared->GetDebugInfo());
1012 BreakLocation location = BreakLocation::FromFrame(debug_info, frame); 1010 BreakLocation location = BreakLocation::FromFrame(debug_info, frame);
1013 1011
(...skipping 1238 matching lines...) Expand 10 before | Expand all | Expand 10 after
2252 } 2250 }
2253 2251
2254 #ifdef DEBUG 2252 #ifdef DEBUG
2255 void Debug::PrintBreakLocation() { 2253 void Debug::PrintBreakLocation() {
2256 if (!FLAG_print_break_location) return; 2254 if (!FLAG_print_break_location) return;
2257 HandleScope scope(isolate_); 2255 HandleScope scope(isolate_);
2258 JavaScriptFrameIterator iterator(isolate_); 2256 JavaScriptFrameIterator iterator(isolate_);
2259 if (iterator.done()) return; 2257 if (iterator.done()) return;
2260 JavaScriptFrame* frame = iterator.frame(); 2258 JavaScriptFrame* frame = iterator.frame();
2261 FrameSummary summary = FrameSummary::GetFirst(frame); 2259 FrameSummary summary = FrameSummary::GetFirst(frame);
2262 int source_position = 2260 int source_position = summary.SourcePosition();
2263 summary.abstract_code()->SourcePosition(summary.code_offset()); 2261 Handle<Object> script_obj = summary.script();
2264 Handle<Object> script_obj(summary.function()->shared()->script(), isolate_);
2265 PrintF("[debug] break in function '"); 2262 PrintF("[debug] break in function '");
2266 summary.function()->PrintName(); 2263 summary.FunctionName()->PrintOn(stdout);
2267 PrintF("'.\n"); 2264 PrintF("'.\n");
2268 if (script_obj->IsScript()) { 2265 if (script_obj->IsScript()) {
2269 Handle<Script> script = Handle<Script>::cast(script_obj); 2266 Handle<Script> script = Handle<Script>::cast(script_obj);
2270 Handle<String> source(String::cast(script->source())); 2267 Handle<String> source(String::cast(script->source()));
2271 Script::InitLineEnds(script); 2268 Script::InitLineEnds(script);
2272 int line = 2269 int line =
2273 Script::GetLineNumber(script, source_position) - script->line_offset(); 2270 Script::GetLineNumber(script, source_position) - script->line_offset();
2274 int column = Script::GetColumnNumber(script, source_position) - 2271 int column = Script::GetColumnNumber(script, source_position) -
2275 (line == 0 ? script->column_offset() : 0); 2272 (line == 0 ? script->column_offset() : 0);
2276 Handle<FixedArray> line_ends(FixedArray::cast(script->line_ends())); 2273 Handle<FixedArray> line_ends(FixedArray::cast(script->line_ends()));
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
2615 logger_->DebugEvent("Put", message.text()); 2612 logger_->DebugEvent("Put", message.text());
2616 } 2613 }
2617 2614
2618 void LockingCommandMessageQueue::Clear() { 2615 void LockingCommandMessageQueue::Clear() {
2619 base::LockGuard<base::Mutex> lock_guard(&mutex_); 2616 base::LockGuard<base::Mutex> lock_guard(&mutex_);
2620 queue_.Clear(); 2617 queue_.Clear();
2621 } 2618 }
2622 2619
2623 } // namespace internal 2620 } // namespace internal
2624 } // namespace v8 2621 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/debug/debug-frames.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698