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
返回隔离区当前的用户标签。
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
注册一个将在当前隔离器中调用 methodServiceExtensionHandler注意:服务协议扩展必须在每个隔离器中注册。

类型定义

ServiceExtensionHandler = Future<ServiceExtensionResponse> Function(String method, Map<String, String> parameters
服务协议扩展处理器。注册于 registerExtension
TimelineAsyncFunction = Future Function()
TimelineSyncFunction<T> = T Function()
Timeline.timeSync 函数参数的类型定义。