Index: runtime/lib/stacktrace.cc |
diff --git a/runtime/lib/stacktrace.cc b/runtime/lib/stacktrace.cc |
index 6175b24b4d18d841ce132233347e27e3053439a3..4df36428856f07c9ae5f2a6d702aae90bfec9bd8 100644 |
--- a/runtime/lib/stacktrace.cc |
+++ b/runtime/lib/stacktrace.cc |
@@ -48,4 +48,20 @@ void _printCurrentStacktrace() { |
OS::PrintErr("=== Current Trace:\n%s===\n", stacktrace.ToCString()); |
} |
+DEFINE_NATIVE_ENTRY(StackTrace_current, 0) { |
+ const GrowableObjectArray& code_list = |
+ GrowableObjectArray::Handle(GrowableObjectArray::New()); |
+ const GrowableObjectArray& pc_offset_list = |
+ GrowableObjectArray::Handle(GrowableObjectArray::New()); |
+ // Skip the StackFrame.current frame. |
+ IterateFrames(code_list, pc_offset_list); |
+ const Array& code_array = Array::Handle(Array::MakeArray(code_list)); |
+ const Array& pc_offset_array = |
+ Array::Handle(Array::MakeArray(pc_offset_list)); |
+ const Stacktrace& stacktrace = Stacktrace::Handle( |
+ Stacktrace::New(code_array, pc_offset_array)); |
+ return stacktrace.raw(); |
+} |
Lasse Reichstein Nielsen
2015/11/18 10:11:38
The VM even has the option of dropping the first s
|
+ |
+ |
} // namespace dart |