dart-sdk/tests/language/full_stacktrace3_test.dart
Ryan Macnak cfe5e5f075 Include metadata in AOT to expand inline frames in stack traces and provide line numbers.
Also fix stack trace collection to always include invisible frames. It can happen that a visible function is inlined into an invisible function, and we don't expand inlined frames until we print a stack trace.

dart2js product x64:
compile time: 12.459s
VMIsolate(CodeSize): 152292
Isolate(CodeSize): 3343117
ReadOnlyData(CodeSize): 3728928
Instructions(CodeSize): 8677600
Total(CodeSize): 15901937
->
compile time: 14.195s (+13%)
VMIsolate(CodeSize): 174034
Isolate(CodeSize): 3892418 (+16%)
ReadOnlyData(CodeSize): 5036320 (+35%)
Instructions(CodeSize): 8682624
Total(CodeSize): 17785396 (+12%)

R=asiva@google.com

Review-Url: https://codereview.chromium.org/2687143005 .
2017-02-13 10:27:36 -08:00

63 lines
1.6 KiB
Dart

// (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:expect/expect.dart";
void func1() {
throw new Exception("Test full stacktrace");
}
void func2() {
func1();
}
void func3() {
try {
func2();
} on Object catch(e, s) {
var fullTrace = s.toString();
print(fullTrace);
Expect.isTrue(fullTrace.contains("func1"));
Expect.isTrue(fullTrace.contains("func2"));
Expect.isTrue(fullTrace.contains("func3"));
Expect.isTrue(fullTrace.contains("func4"));
Expect.isTrue(fullTrace.contains("func5"));
Expect.isTrue(fullTrace.contains("func6"));
Expect.isTrue(fullTrace.contains("func7"));
Expect.isTrue(fullTrace.contains("main"));
throw new Exception("This is not a rethrow");
}
}
int func4() {
func3();
return 1;
}
int func5() {
try {
func4();
} on Object catch(e, s) {
var fullTrace = s.toString();
print(fullTrace);
Expect.isFalse(fullTrace.contains("func1"));
Expect.isFalse(fullTrace.contains("func2"));
Expect.isTrue(fullTrace.contains("func3"));
Expect.isTrue(fullTrace.contains("func4"));
Expect.isTrue(fullTrace.contains("func5"));
Expect.isTrue(fullTrace.contains("func6"));
Expect.isTrue(fullTrace.contains("func7"));
Expect.isTrue(fullTrace.contains("main"));
}
return 1;
}
int func6() {
func5();
return 1;
}
int func7() {
func6();
return 1;
}
main() {
var i = func7();
Expect.equals(1, i);
}