anchor.diff:        isolate.kill(priority: Isolate.immediate);
       });
       await exitPort.first;
  +    errorSubscription.cancel();
       timer.cancel();
  -    if (!timedOut) {
  +    if (!timedOut && !gotError) {
         int seconds = stopwatch.elapsedMilliseconds ~/ 1000;
         print("Suite finished (took ${seconds} seconds)");
       }
  -    return timedOut;
  +    return timedOut || gotError;
     });
   
     // Wait for isolate to terminate and clean up.
  -  bool timeout = await future;
  +  bool timeoutOrCrash = await future;
     resultsPort.close();
     logsPort.close();
  +
  +  if (exitCode != 0) timeoutOrCrash = true;
   
     // Write results.json and logs.json.
     Uri resultJsonUri = options.outputDirectory.resolve("results.json");
  
positive.code:     print("Running suite");
      Isolate isolate = await Isolate.spawn<SuiteConfiguration>(
          runSuite, configuration,
          onExit: exitPort.sendPort);
      bool timedOut = false;
      Timer timer = Timer(timeoutDuration, () {
        timedOut = true;
  
negative.code: 
    // Start the test suite in a new isolate.
    ReceivePort exitPort = new ReceivePort();
    ReceivePort errorPort = new ReceivePort();
    SuiteConfiguration configuration = new SuiteConfiguration(
      resultsPort.sendPort,
      logsPort.sendPort,
  