Chromium Code Reviews| Index: runtime/vm/debugger.cc |
| =================================================================== |
| --- runtime/vm/debugger.cc (revision 2291) |
| +++ runtime/vm/debugger.cc (working copy) |
| @@ -22,6 +22,7 @@ |
| DEFINE_FLAG(charp, bpt, NULL, "Debug breakpoint at <func>"); |
|
siva
2011/12/09 02:20:04
Is this flag used anymore?
hausner
2011/12/13 00:14:59
No. Good catch.
|
| +static const bool verbose = false; |
|
siva
2011/12/09 02:20:04
Can this be turned on at the command line?
hausner
2011/12/13 00:14:59
No it's just for my own "debugger debugging" at th
|
| Breakpoint::Breakpoint(const Function& func, intptr_t pc_desc_index) |
| : function_(func.raw()), |
| @@ -89,6 +90,33 @@ |
| } |
| +const char* Debugger::QualifiedFunctionName(const Function& func) { |
| + String& func_name = String::Handle(func.name()); |
| + Class& func_class = Class::Handle(func.owner()); |
| + String& class_name = String::Handle(func_class.Name()); |
| + |
| + const char* kFormat = "%s%s%s"; |
| + intptr_t len = OS::SNPrint(NULL, 0, kFormat, |
| + func_class.IsTopLevel() ? "" : class_name.ToCString(), |
| + func_class.IsTopLevel() ? "" : ".", |
| + func_name.ToCString()); |
|
siva
2011/12/09 02:20:04
ditto comment regarding library URL needed for ful
hausner
2011/12/13 00:14:59
Yes. Cf other comment.
|
| + len++; // String terminator. |
| + char* chars = reinterpret_cast<char*>( |
| + Isolate::Current()->current_zone()->Allocate(len)); |
| + OS::SNPrint(chars, len, kFormat, |
| + func_class.IsTopLevel() ? "" : class_name.ToCString(), |
| + func_class.IsTopLevel() ? "" : ".", |
| + func_name.ToCString()); |
| + return chars; |
| +} |
| + |
| + |
| +RawString* ActivationFrame::QualifiedFunctionName() { |
| + Function& func = Function::Handle(DartFunction()); |
| + return String::New(Debugger::QualifiedFunctionName(func)); |
| +} |
| + |
| + |
| RawString* ActivationFrame::SourceUrl() { |
| const Script& script = Script::Handle(SourceScript()); |
| return script.url(); |
| @@ -144,30 +172,19 @@ |
| const char* ActivationFrame::ToCString() { |
| - const char* kFormat = "Function: '%s%s%s' url: '%s' line: %d"; |
| + const char* kFormat = "Function: '%s' url: '%s' line: %d"; |
| Function& func = Function::Handle(DartFunction()); |
| - String& func_name = String::Handle(func.name()); |
| - Class& func_class = Class::Handle(func.owner()); |
| - String& class_name = String::Handle(func_class.Name()); |
| String& url = String::Handle(SourceUrl()); |
| intptr_t line = LineNumber(); |
| + const char* func_name = Debugger::QualifiedFunctionName(func); |
| - intptr_t len = OS::SNPrint(NULL, 0, kFormat, |
| - class_name.ToCString(), |
| - func_class.IsTopLevel() ? "" : ".", |
| - func_name.ToCString(), |
| - url.ToCString(), |
| - line); |
| + intptr_t len = |
| + OS::SNPrint(NULL, 0, kFormat, func_name, url.ToCString(), line); |
| len++; // String terminator. |
| char* chars = reinterpret_cast<char*>( |
| Isolate::Current()->current_zone()->Allocate(len)); |
| - OS::SNPrint(chars, len, kFormat, |
| - class_name.ToCString(), |
| - func_class.IsTopLevel() ? "" : ".", |
| - func_name.ToCString(), |
| - url.ToCString(), |
| - line); |
| + OS::SNPrint(chars, len, kFormat, func_name, url.ToCString(), line); |
| return chars; |
| } |
| @@ -251,10 +268,12 @@ |
| } |
| } |
| if (bpt != NULL) { |
| - OS::Print("Setting breakpoint at '%s' line %d (PC %p)\n", |
| - String::Handle(bpt->SourceUrl()).ToCString(), |
| - bpt->LineNumber(), |
| - bpt->pc()); |
| + if (verbose) { |
| + OS::Print("Setting breakpoint at '%s' line %d (PC %p)\n", |
| + String::Handle(bpt->SourceUrl()).ToCString(), |
| + bpt->LineNumber(), |
| + bpt->pc()); |
| + } |
| AddBreakpoint(bpt); |
| return bpt; |
| } |
| @@ -296,10 +315,12 @@ |
| ASSERT(frame != NULL); |
| Breakpoint* bpt = GetBreakpoint(frame->pc()); |
| ASSERT(bpt != NULL); |
| - OS::Print(">>> Breakpoint at %s:%d (Address %p)\n", |
| - bpt ? String::Handle(bpt->SourceUrl()).ToCString() : "?", |
| - bpt ? bpt->LineNumber() : 0, |
| - frame->pc()); |
| + if (verbose) { |
| + OS::Print(">>> Breakpoint at %s:%d (Address %p)\n", |
| + bpt ? String::Handle(bpt->SourceUrl()).ToCString() : "?", |
| + bpt ? bpt->LineNumber() : 0, |
| + frame->pc()); |
| + } |
| StackTrace* stack_trace = new StackTrace(8); |
| while (frame != NULL) { |
| ASSERT(frame->IsValid()); |