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 命令中的调试器等开发者工具可以通过 ServiceServiceProtocolInfo 类访问运行时系统公开的应用程序信息。

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 的函数参数定义。