flutter / flutter/devtools

Devtool extension authoring: EvalOnDartLibrary, how to recursively inspect an Object without causing `Sentinel <expired>` due to race conditions?

Abierto
#9,634 13 comentarios 0 reacciones 0 asignados Ver en GitHub
devtools extensions P2
Lenguaje dominante
Dart
Estrellas
1.7k
Forks
404
Merge medio
6 d 17 h
PR fusionados (30 d)
18

Descripción

Hello!

I think I'm missing something with regards to `EvalOnDartLibrary`. I fail to see how it is possible to fully map out an object without ever risking an `` Sentinel or not loosing the ability to inspect private members.

I am aware that one trick is to do (pseudo code):

```dart
final id = eval('globalMap.register()')

try {
final content = eval('globalMap.get("$id").');
} finally {
eval('globalMap.unregister("$id")');
}
```

This prevents the ``. But afaik, prevents reading private members on the inspected object, due to `globalMap` and the private members being defined in different libraries.
(also, this will forcibly trigger late fields ; which can be undesired)

If we instead do:

```dart
final value= eval('')
final content = eval('that.', scope: {'that': value.id});
```

Then we risk that `value` will expire before `content` is resolved.

Is there something I'm missing here? Or do we need a new feature to solve this?

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.