dart:developer 库
与调试器和检查器等开发者工具交互。
这是一个专门旨在通过编程方式与 Dart 运行时交互以进行调试和检查的库。示例用途包括高级调试和创建开发者工具。
此库针对 Dart Web 和 Dart Native (VM) 提供平台特定实现。特定平台可能不支持所有操作。
此库提供的功能通常仅在开发模式下运行的 Dart 代码中可用,例如 dart run
,而在生产模式下不可用,例如 dart compile exe
输出的代码。
调试
可以使用 debugger 函数停止程序,就像触发了断点一样。断点将放置在 debugger
调用之后。此功能可用于根据代码中的逻辑触发断点。
示例
var counter = 0;
final someInterestingValue = 1000;
while (true) {
if (counter == someInterestingValue) {
// Trigger a breakpoint in the the debugger.
debugger();
}
counter++;
}
在执行 dart run --observe
并在 DevTools 中打开的情况下,调试器将在 counter
呼吁值为 1000
时停止。
检查
连接到运行时系统的开发者工具,例如 Dart DevTools,可能允许在 "时间线" 视图中查看执行时间。可以添加更多信息和时间事件到 Timeline 的静态方法中。
示例
void main() {
Timeline.timeSync('Calculation loop', () {
for (var i = 30; i < 50; i++) {
Timeline.timeSync('fib($i)', () {
fibonacci(i);
});
}
});
}
int fibonacci(int n) => (n < 2) ? n : fibonacci(n - 2) + fibonacci(n - 1);
在执行 dart run --observe
并在 DevTools 中打开的情况下,性能选项卡将显示包含传递给 timeSync
的注释的时间线。
开发者工具
如内置于 dart
命令的调试器之类的开发者工具,可以使用 Service 和 ServiceProtocolInfo 类访问由运行时系统公开的运行应用程序信息。
类
- Flow
- 表示 Flow 事件的类。
- NativeRuntime
- 在原生运行时上可用的功能。
- Service
- 访问有关服务协议的信息并控制提供 Dart VM 调试和检查 Dart 程序的服务所使用的 Web 服务器。
- ServiceExtensionResponse
- 服务协议扩展 RPC 的响应。
- ServiceProtocolInfo
- 服务协议是客户端(如 Observatory)可以用来访问 Dart VM 提供的调试和检查 Dart 程序服务的协议。这个类封装了这个服务的版本号和 Uri。
- Timeline
- 添加到时间线。
- TimelineTask
- 时间线上的异步任务。异步任务可以有多个(嵌套)同步操作。同步操作可以比当前孤立事件存在更长的时间。为了将 TimelineTask 传递到另一个隔离器,您必须首先调用 pass 以获取任务 ID,然后在另一个隔离器中构建一个新的 TimelineTask。
- UserTag
- 用户标签可用于在 DevTools CPU profiler 中将样本分组。
属性
- extensionStreamHasListener → bool
- 是否当前 "扩展" 流至少有一个监听器。无设置器
- reachabilityBarrier → int
- 当前可达性屏障状态。无设置器
函数
-
addHttpClientProfilingData(
Map< String, dynamic> requestProfile) → void - 为分析目的记录与HTTP请求关联的数据。
-
debugger(
{bool when = true, String? message}) → bool - 如果
when
为 true,则停止程序,就像在下面的语句处设置了断点。 -
getCurrentTag(
) → UserTag - 返回隔离区当前的用户标签。
-
getHttpClientProfilingData(
) → List< Map< String, dynamic> > - 返回通过 addHttpClientProfilingData 添加的数据。
-
inspect(
Object? object) → Object? - 将
object
的引用发送到任何附加的调试器。 -
log(
String message, {DateTime? time, int? sequenceNumber, int level = 0, String name = '', Zone? zone, Object? error, StackTrace? stackTrace}) → void - 发出日志事件。
-
postEvent(
String eventKind, Map eventData, {String stream = 'Extension'}) → void - 将
eventKind
的事件和eventData
负载 posting 到 "Extension" 事件流。 -
registerExtension(
String method, ServiceExtensionHandler handler ) → void - 注册一个将在当前隔离器中调用
method
的 ServiceExtensionHandler。 注意:服务协议扩展必须在每个隔离器中注册。
类型定义
-
ServiceExtensionHandler = Future<
ServiceExtensionResponse> Function(String method, Map<String, String> parameters - 服务协议扩展处理器。注册于 registerExtension。
- TimelineAsyncFunction = Future Function()
-
TimelineSyncFunction<
T> = T Function() - Timeline.timeSync 函数参数的类型定义。