anchor.diff:    /// Request that the plugin shutdown.
     Future<void> stop() {
       if (currentSession == null) {
  -      throw StateError('Cannot stop a plugin that is not running.');
  +      if (_exception != null) {
  +        // Plugin crashed, nothing to do.
  +        return Future<void>.value(null);
  +      }
  +      throw StateError('Cannot stop a plugin that is not running. ');
       }
       var doneFuture = currentSession.stop();
       currentSession = null;
  
positive.code:   void handleOnError(dynamic error) {
      var errorPair = (error as List).cast<String>();
      var stackTrace = StackTrace.fromString(errorPair[1]);
      info.exception = CaughtException(PluginException(errorPair[0]), stackTrace);
      info.instrumentationService
          .logPluginException(info.data, errorPair[0], stackTrace);
    }
  
    /// Handle a [response] from the plugin by completing the future that was
  
negative.code:   /// Return the data known about this plugin.
    PluginData get data =>
        PluginData(pluginId, currentSession?.name, currentSession?.version);
  
    /// The exception that occurred that prevented the plugin from being started,
    /// or `null` if there was no exception (possibly because no attempt has yet
    /// been made to start the plugin).
    CaughtException get exception => _exception;
  
    /// Return the id of this plugin, used to identify the plugin to users.
    String get pluginId;
  