flutter的stackframe

stackframe这个类是在stack_frame.dart这个文件里的,主要是解析报错信息的,就如下展示的报错信息:

#0      getSampleStack.<anonymous closure> (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:57)
#1      new Future.sync (dart:async/future.dart:224:31)
#2      getSampleStack (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:10)
#3      main (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:46:40)
#4      main (package:flutter_goldens/flutter_goldens.dart:43:17)
<asynchronous suspension>
#5      main.<anonymous closure>.<anonymous closure> (file:///temp/path.whatever/listener.dart:47:18)
#6      _rootRun (dart:async/zone.dart:1126:13)
#7      _CustomZone.run (dart:async/zone.dart:1023:19)
#8      _runZoned (dart:async/zone.dart:1518:10)
#9      runZoned (dart:async/zone.dart:1465:12)
#10     Declarer.declare (package:test_api/src/backend/declarer.dart:130:22)
#11     RemoteListener.start.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:124:26)
<asynchronous suspension>
#12     _rootRun (dart:async/zone.dart:1126:13)
#13     _CustomZone.run (dart:async/zone.dart:1023:19)
#14     _runZoned (dart:async/zone.dart:1518:10)
#15     runZoned (dart:async/zone.dart:1502:12)
#16     RemoteListener.start.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:70:9)
#17     _rootRun (dart:async/zone.dart:1126:13)
#18     _CustomZone.run (dart:async/zone.dart:1023:19)
#19     _runZoned (dart:async/zone.dart:1518:10)
#20     runZoned (dart:async/zone.dart:1465:12)
#21     StackTraceFormatter.asCurrent (package:test_api/src/backend/stack_trace_formatter.dart:41:31)
#22     RemoteListener.start.<anonymous closure> (package:test_api/src/remote_listener.dart:69:29)
#23     _rootRun (dart:async/zone.dart:1126:13)
#24     _CustomZone.run (dart:async/zone.dart:1023:19)
#25     _runZoned (dart:async/zone.dart:1518:10)
#26     runZoned (dart:async/zone.dart:1465:12)
#27     SuiteChannelManager.asCurrent (package:test_api/src/suite_channel_manager.dart:34:31)
#28     RemoteListener.start (package:test_api/src/remote_listener.dart:68:27)
#29     serializeSuite (file:///temp/path.whatever/listener.dart:17:25)
#30     main (file:///temp/path.whatever/listener.dart:43:36)
#31     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239:25)
#32     _rootRun (dart:async/zone.dart:1126:13)
#33     _CustomZone.run (dart:async/zone.dart:1023:19)
#34     _runZoned (dart:async/zone.dart:1518:10)
#35     runZoned (dart:async/zone.dart:1502:12)
#36     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231:5)
#37     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:19)
#38     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)

是不是觉得很在console里常常看到这个?这个类就是解析这一部分信息的, 输出的结果就是如下图所示:

  StackFrame(number: 0,  className: '',                    method: 'getSampleStack', packageScheme: 'file',    package: '<unknown>',       packagePath: '/path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart', line: 40,   column: 57, source: '#0      getSampleStack.<anonymous closure> (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:57)'),
  StackFrame(number: 1,  className: 'Future',              method: 'sync',           packageScheme: 'dart',    package: 'async',           packagePath: 'future.dart',                                                                 line: 224,  column: 31, isConstructor: true, source: '#1      new Future.sync (dart:async/future.dart:224:31)'),
  StackFrame(number: 2,  className: '',                    method: 'getSampleStack', packageScheme: 'file',    package: '<unknown>',       packagePath: '/path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart', line: 40,   column: 10, source: '#2      getSampleStack (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:10)'),
  StackFrame(number: 3,  className: '',                    method: 'main',           packageScheme: 'file',    package: '<unknown>',       packagePath: '/path/to/flutter/packages/flutter/foundation/error_reporting_test.dart',      line: 46,   column: 40, source: '#3      main (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:46:40)'),
  StackFrame(number: 4,  className: '',                    method: 'main',           packageScheme: 'package', package: 'flutter_goldens', packagePath: 'flutter_goldens.dart',                                                        line: 43,   column: 17, source: '#4      main (package:flutter_goldens/flutter_goldens.dart:43:17)'),
  StackFrame.asynchronousSuspension,
  StackFrame(number: 5,  className: '',                    method: 'main',           packageScheme: 'file',    package: '<unknown>',      packagePath: '/temp/path.whatever/listener.dart',                                           line: 47,   column: 18, source: '#5      main.<anonymous closure>.<anonymous closure> (file:///temp/path.whatever/listener.dart:47:18)'),
  StackFrame(number: 6,  className: '',                    method: '_rootRun',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1126, column: 13, source: '#6      _rootRun (dart:async/zone.dart:1126:13)'),
  StackFrame(number: 7,  className: '_CustomZone',         method: 'run',            packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1023, column: 19, source: '#7      _CustomZone.run (dart:async/zone.dart:1023:19)'),
  StackFrame(number: 8,  className: '',                    method: '_runZoned',      packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1518, column: 10, source: '#8      _runZoned (dart:async/zone.dart:1518:10)'),
  StackFrame(number: 9,  className: '',                    method: 'runZoned',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1465, column: 12, source: '#9      runZoned (dart:async/zone.dart:1465:12)'),
  StackFrame(number: 10, className: 'Declarer',            method: 'declare',        packageScheme: 'package', package: 'test_api',       packagePath: 'src/backend/declarer.dart',                                                   line: 130,  column: 22, source: '#10     Declarer.declare (package:test_api/src/backend/declarer.dart:130:22)'),
  StackFrame(number: 11, className: 'RemoteListener',      method: 'start',          packageScheme: 'package', package: 'test_api',       packagePath: 'src/remote_listener.dart',                                                    line: 124,  column: 26, source: '#11     RemoteListener.start.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:124:26)'),
  StackFrame.asynchronousSuspension,
  StackFrame(number: 12, className: '',                    method: '_rootRun',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1126, column: 13, source: '#12     _rootRun (dart:async/zone.dart:1126:13)'),
  StackFrame(number: 13, className: '_CustomZone',         method: 'run' ,           packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1023, column: 19, source: '#13     _CustomZone.run (dart:async/zone.dart:1023:19)'),
  StackFrame(number: 14, className: '',                    method: '_runZoned',      packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1518, column: 10, source: '#14     _runZoned (dart:async/zone.dart:1518:10)'),
  StackFrame(number: 15, className: '',                    method: 'runZoned',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1502, column: 12, source: '#15     runZoned (dart:async/zone.dart:1502:12)'),
  StackFrame(number: 16, className: 'RemoteListener',      method: 'start',          packageScheme: 'package', package: 'test_api',       packagePath: 'src/remote_listener.dart',                                                    line: 70,   column: 9, source: '#16     RemoteListener.start.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:70:9)'),
  StackFrame(number: 17, className: '',                    method: '_rootRun',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1126, column: 13, source: '#17     _rootRun (dart:async/zone.dart:1126:13)'),
  StackFrame(number: 18, className: '_CustomZone',         method: 'run',            packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1023, column: 19, source: '#18     _CustomZone.run (dart:async/zone.dart:1023:19)'),
  StackFrame(number: 19, className: '',                    method: '_runZoned',      packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1518, column: 10, source: '#19     _runZoned (dart:async/zone.dart:1518:10)'),
  StackFrame(number: 20, className: '',                    method: 'runZoned',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1465, column: 12, source: '#20     runZoned (dart:async/zone.dart:1465:12)'),
  StackFrame(number: 21, className: 'StackTraceFormatter', method: 'asCurrent',      packageScheme: 'package', package: 'test_api',       packagePath: 'src/backend/stack_trace_formatter.dart',                                      line: 41,   column: 31, source: '#21     StackTraceFormatter.asCurrent (package:test_api/src/backend/stack_trace_formatter.dart:41:31)'),
  StackFrame(number: 22, className: 'RemoteListener',      method: 'start',          packageScheme: 'package', package: 'test_api',       packagePath: 'src/remote_listener.dart',                                                    line: 69,   column: 29, source: '#22     RemoteListener.start.<anonymous closure> (package:test_api/src/remote_listener.dart:69:29)'),
  StackFrame(number: 23, className: '',                    method: '_rootRun',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1126, column: 13, source: '#23     _rootRun (dart:async/zone.dart:1126:13)'),
  StackFrame(number: 24, className: '_CustomZone',         method: 'run',            packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1023, column: 19, source: '#24     _CustomZone.run (dart:async/zone.dart:1023:19)'),
  StackFrame(number: 25, className: '',                    method: '_runZoned',      packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1518, column: 10, source: '#25     _runZoned (dart:async/zone.dart:1518:10)'),
  StackFrame(number: 26, className: '',                    method: 'runZoned',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1465, column: 12, source: '#26     runZoned (dart:async/zone.dart:1465:12)'),
  StackFrame(number: 27, className: 'SuiteChannelManager', method: 'asCurrent',      packageScheme: 'package', package: 'test_api',       packagePath: 'src/suite_channel_manager.dart',                                              line: 34,   column: 31, source: '#27     SuiteChannelManager.asCurrent (package:test_api/src/suite_channel_manager.dart:34:31)'),
  StackFrame(number: 28, className: 'RemoteListener',      method: 'start',          packageScheme: 'package', package: 'test_api',       packagePath: 'src/remote_listener.dart',                                                    line: 68,   column: 27, source: '#28     RemoteListener.start (package:test_api/src/remote_listener.dart:68:27)'),
  StackFrame(number: 29, className: '',                    method: 'serializeSuite', packageScheme: 'file',    package: '<unknown>',      packagePath: '/temp/path.whatever/listener.dart',                                           line: 17,   column: 25, source: '#29     serializeSuite (file:///temp/path.whatever/listener.dart:17:25)'),
  StackFrame(number: 30, className: '',                    method: 'main',           packageScheme: 'file',    package: '<unknown>',      packagePath: '/temp/path.whatever/listener.dart',                                           line: 43,   column: 36, source: '#30     main (file:///temp/path.whatever/listener.dart:43:36)'),
  StackFrame(number: 31, className: '',                    method: '_runMainZoned',  packageScheme: 'dart',    package: 'ui',             packagePath: 'hooks.dart',                                                                  line:239,   column: 25, source: '#31     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239:25)'),
  StackFrame(number: 32, className: '',                    method: '_rootRun',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1126, column: 13, source: '#32     _rootRun (dart:async/zone.dart:1126:13)'),
  StackFrame(number: 33, className: '_CustomZone',         method: 'run' ,           packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1023, column: 19, source: '#33     _CustomZone.run (dart:async/zone.dart:1023:19)'),
  StackFrame(number: 34, className: '',                    method: '_runZoned',      packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1518, column: 10, source: '#34     _runZoned (dart:async/zone.dart:1518:10)'),
  StackFrame(number: 35, className: '',                    method: 'runZoned',       packageScheme: 'dart',    package: 'async',          packagePath: 'zone.dart',                                                                   line: 1502, column: 12, source: '#35     runZoned (dart:async/zone.dart:1502:12)'),
  StackFrame(number: 36, className: '',                    method: '_runMainZoned',  packageScheme: 'dart',    package: 'ui',             packagePath: 'hooks.dart',                                                                  line: 231,  column: 5, source: '#36     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231:5)'),
  StackFrame(number: 37, className: '',                    method: '_startIsolate',  packageScheme: 'dart',    package: 'isolate-patch',  packagePath: 'isolate_patch.dart',                                                          line: 307,  column: 19, source: '#37     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:19)'),
  StackFrame(number: 38, className: '_RawReceivePortImpl', method: '_handleMessage', packageScheme: 'dart',    package: 'isolate-patch',  packagePath: 'isolate_patch.dart',                   

这个类内部逻辑很简单,就不做详细分析,而且对于我们实际开发的意义有限,做统计比较合适。

这是flutter框架源码分析的其中一篇,因能力有限,有诸多不足之处,还请斧正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266