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 - 返回隔离器的当前 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
有效负载。 -
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 的函数参数定义。