| Index: runtime/vm/debugger_api_impl.cc
|
| diff --git a/runtime/vm/debugger_api_impl.cc b/runtime/vm/debugger_api_impl.cc
|
| index aabf70e9b95409563cf582699aae8183f0f7a8a9..dcee7a72ec2e604e36c148f95f0e4fa4bf2b621f 100644
|
| --- a/runtime/vm/debugger_api_impl.cc
|
| +++ b/runtime/vm/debugger_api_impl.cc
|
| @@ -221,17 +221,42 @@ DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) {
|
| Isolate* isolate = Isolate::Current();
|
| DARTSCOPE(isolate);
|
| CHECK_NOT_NULL(trace);
|
| - *trace = reinterpret_cast<Dart_StackTrace>(isolate->debugger()->StackTrace());
|
| + *trace = reinterpret_cast<Dart_StackTrace>(
|
| + isolate->debugger()->CurrentStackTrace());
|
| return Api::Success();
|
| }
|
|
|
|
|
| +DART_EXPORT Dart_Handle Dart_GetStackTraceFromError(Dart_Handle handle,
|
| + Dart_StackTrace* trace) {
|
| + Isolate* isolate = Isolate::Current();
|
| + DARTSCOPE(isolate);
|
| + CHECK_NOT_NULL(trace);
|
| + const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(handle));
|
| + if (obj.IsUnhandledException()) {
|
| + const UnhandledException& error = UnhandledException::Cast(obj);
|
| + Stacktrace& dart_stacktrace = Stacktrace::Handle(isolate);
|
| + dart_stacktrace ^= error.stacktrace();
|
| + if (dart_stacktrace.IsNull()) {
|
| + *trace = NULL;
|
| + } else {
|
| + *trace = reinterpret_cast<Dart_StackTrace>(
|
| + isolate->debugger()->StackTraceFrom(dart_stacktrace));
|
| + }
|
| + return Api::Success();
|
| + } else {
|
| + return Api::NewError("Can only get stacktraces from error handles or "
|
| + "instances of Error.");
|
| + }
|
| +}
|
| +
|
| +
|
| DART_EXPORT Dart_Handle Dart_ActivationFrameInfo(
|
| Dart_ActivationFrame activation_frame,
|
| Dart_Handle* function_name,
|
| Dart_Handle* script_url,
|
| intptr_t* line_number,
|
| - intptr_t* library_id) {
|
| + intptr_t* column_number) {
|
| Isolate* isolate = Isolate::Current();
|
| DARTSCOPE(isolate);
|
| CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
|
| @@ -244,9 +269,8 @@ DART_EXPORT Dart_Handle Dart_ActivationFrameInfo(
|
| if (line_number != NULL) {
|
| *line_number = frame->LineNumber();
|
| }
|
| - if (library_id != NULL) {
|
| - const Library& lib = Library::Handle(frame->Library());
|
| - *library_id = lib.index();
|
| + if (column_number != NULL) {
|
| + *column_number = frame->ColumnNumber();
|
| }
|
| return Api::Success();
|
| }
|
|
|