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

Side by Side Diff: lib/src/frame.dart

Issue 1288573002: Properly parse native-code V8 frames. (Closed) Base URL: git@github.com:dart-lang/stack_trace@master
Patch Set: Created 5 years, 4 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 | « CHANGELOG.md ('k') | pubspec.yaml » ('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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library frame; 5 library frame;
6 6
7 import 'package:path/path.dart' as path; 7 import 'package:path/path.dart' as path;
8 8
9 import 'trace.dart'; 9 import 'trace.dart';
10 10
11 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart:42:21) 11 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart:42:21)
12 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart:42) 12 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart:42)
13 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart) 13 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart)
14 final _vmFrame = new RegExp(r'^#\d+\s+(\S.*) \((.+?)((?::\d+){0,2})\)$'); 14 final _vmFrame = new RegExp(r'^#\d+\s+(\S.*) \((.+?)((?::\d+){0,2})\)$');
15 15
16 // at Object.stringify (native)
16 // at VW.call$0 (http://pub.dartlang.org/stuff.dart.js:560:28) 17 // at VW.call$0 (http://pub.dartlang.org/stuff.dart.js:560:28)
17 // at VW.call$0 (eval as fn 18 // at VW.call$0 (eval as fn
18 // (http://pub.dartlang.org/stuff.dart.js:560:28), efn:3:28) 19 // (http://pub.dartlang.org/stuff.dart.js:560:28), efn:3:28)
19 // at http://pub.dartlang.org/stuff.dart.js:560:28 20 // at http://pub.dartlang.org/stuff.dart.js:560:28
20 final _v8Frame = new RegExp( 21 final _v8Frame = new RegExp(
21 r'^\s*at (?:(\S.*?)(?: \[as [^\]]+\])? \((.*)\)|(.*))$'); 22 r'^\s*at (?:(\S.*?)(?: \[as [^\]]+\])? \((.*)\)|(.*))$');
22 23
23 // http://pub.dartlang.org/stuff.dart.js:560:28 24 // http://pub.dartlang.org/stuff.dart.js:560:28
24 final _v8UrlLocation = new RegExp(r'^(.*):(\d+):(\d+)$'); 25 final _v8UrlLocation = new RegExp(r'^(.*):(\d+):(\d+)|native$');
25 26
26 // eval as function (http://pub.dartlang.org/stuff.dart.js:560:28), efn:3:28 27 // eval as function (http://pub.dartlang.org/stuff.dart.js:560:28), efn:3:28
27 // eval as function (http://pub.dartlang.org/stuff.dart.js:560:28) 28 // eval as function (http://pub.dartlang.org/stuff.dart.js:560:28)
28 // eval as function (eval as otherFunction 29 // eval as function (eval as otherFunction
29 // (http://pub.dartlang.org/stuff.dart.js:560:28)) 30 // (http://pub.dartlang.org/stuff.dart.js:560:28))
30 final _v8EvalLocation = new RegExp( 31 final _v8EvalLocation = new RegExp(
31 r'^eval at (?:\S.*?) \((.*)\)(?:, .*?:\d+:\d+)?$'); 32 r'^eval at (?:\S.*?) \((.*)\)(?:, .*?:\d+:\d+)?$');
32 33
33 // .VW.call$0@http://pub.dartlang.org/stuff.dart.js:560 34 // .VW.call$0@http://pub.dartlang.org/stuff.dart.js:560
34 // .VW.call$0("arg")@http://pub.dartlang.org/stuff.dart.js:560 35 // .VW.call$0("arg")@http://pub.dartlang.org/stuff.dart.js:560
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 160
160 // v8 location strings can be arbitrarily-nested, since it adds a layer of 161 // v8 location strings can be arbitrarily-nested, since it adds a layer of
161 // nesting for each eval performed on that line. 162 // nesting for each eval performed on that line.
162 parseLocation(location, member) { 163 parseLocation(location, member) {
163 var evalMatch = _v8EvalLocation.firstMatch(location); 164 var evalMatch = _v8EvalLocation.firstMatch(location);
164 while (evalMatch != null) { 165 while (evalMatch != null) {
165 location = evalMatch[1]; 166 location = evalMatch[1];
166 evalMatch = _v8EvalLocation.firstMatch(location); 167 evalMatch = _v8EvalLocation.firstMatch(location);
167 } 168 }
168 169
170 if (location == 'native') {
171 return new Frame(Uri.parse('native'), null, null, member);
172 }
173
169 var urlMatch = _v8UrlLocation.firstMatch(location); 174 var urlMatch = _v8UrlLocation.firstMatch(location);
170 if (urlMatch == null) { 175 if (urlMatch == null) {
171 throw new FormatException( 176 throw new FormatException(
172 "Couldn't parse V8 stack trace line '$frame'."); 177 "Couldn't parse V8 stack trace line '$frame'.");
173 } 178 }
174 179
175 return new Frame( 180 return new Frame(
176 _uriOrPathToUri(urlMatch[1]), 181 _uriOrPathToUri(urlMatch[1]),
177 int.parse(urlMatch[2]), 182 int.parse(urlMatch[2]),
178 int.parse(urlMatch[3]), 183 int.parse(urlMatch[3]),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 // their stack frames. However, if we do get a relative path, we should 291 // their stack frames. However, if we do get a relative path, we should
287 // handle it gracefully. 292 // handle it gracefully.
288 if (uriOrPath.contains('\\')) return path.windows.toUri(uriOrPath); 293 if (uriOrPath.contains('\\')) return path.windows.toUri(uriOrPath);
289 return Uri.parse(uriOrPath); 294 return Uri.parse(uriOrPath);
290 } 295 }
291 296
292 Frame(this.uri, this.line, this.column, this.member); 297 Frame(this.uri, this.line, this.column, this.member);
293 298
294 String toString() => '$location in $member'; 299 String toString() => '$location in $member';
295 } 300 }
OLDNEW
« no previous file with comments | « CHANGELOG.md ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698