Index: tests/standalone/debugger/debug_lib.dart |
=================================================================== |
--- tests/standalone/debugger/debug_lib.dart (revision 22855) |
+++ tests/standalone/debugger/debug_lib.dart (working copy) |
@@ -179,7 +179,7 @@ |
var id = template["id"]; |
assert(id != null && id >= 0); |
if (response["id"] != id) { |
- debugger.error("Expected messaged id $id but got ${response["id"]}."); |
+ debugger.error("Error: expected messaged id $id but got ${response["id"]}."); |
} |
} |
} |
@@ -207,7 +207,7 @@ |
} |
} |
if (frames.length < functionNames.length) { |
- debugger.error("stack trace not long enough " |
+ debugger.error("Error: stack trace not long enough " |
"to match ${functionNames.length} frames"); |
return; |
} |
@@ -216,7 +216,7 @@ |
var name = frames[idx]["functionName"]; |
assert(name != null); |
if (name != functionNames[i]) { |
- debugger.error("call frame $idx: " |
+ debugger.error("Error: call frame $idx: " |
"expected function name '${functionNames[i]}' but found '$name'"); |
return; |
} |
@@ -305,6 +305,7 @@ |
int seqNr = 0; // Sequence number of next debugger command message. |
Command lastCommand = null; // Most recent command sent to target. |
List<String> errors = new List(); |
+ bool cleanupDone = false; |
// Data collected from debug target. |
Map currentMessage = null; // Currently handled message sent by target. |
@@ -344,7 +345,7 @@ |
print("Debuggee isolate id ${msg["params"]["id"]} shut down."); |
shutdownEventSeen = true; |
if (!script.isEmpty) { |
- error("Premature isolate shutdown event seen."); |
+ error("Error: premature isolate shutdown event seen."); |
} |
} |
} else if (msg["event"] == "breakpointResolved") { |
@@ -360,7 +361,7 @@ |
} else if (msg["event"] == "paused") { |
isPaused = true; |
} else { |
- error("unknown debugger event received"); |
+ error("Error: unknown debugger event received"); |
} |
} |
@@ -409,7 +410,7 @@ |
if (responses.haveGarbage()) { |
error("Error: leftover text after message: '${responses.buffer}'"); |
error("Previous message may be malformed, was: '$msg'"); |
- close(killDebugee: true); |
+ cleanup(); |
return; |
} |
var msgObj = JSON.parse(msg); |
@@ -417,11 +418,11 @@ |
if (errorsDetected) { |
error("Error while handling script entry"); |
error("Message received from debug target: $msg"); |
- close(killDebugee: true); |
+ cleanup(); |
return; |
} |
if (shutdownEventSeen) { |
- close(); |
+ cleanup(); |
return; |
} |
if (isPaused) sendNextCommand(); |
@@ -464,18 +465,18 @@ |
handleMessages(); |
} catch(e, trace) { |
print("Unexpected exception:\n$e\n$trace"); |
- close(killDebugee: true); |
+ cleanup(); |
} |
}, |
onDone: () { |
print("Connection closed by debug target"); |
- close(killDebugee: true); |
+ cleanup(); |
}, |
onError: (e) { |
print("Error '$e' detected in input stream from debug target"); |
var trace = getAttachedStackTrace(e); |
if (trace != null) print("StackTrace: $trace"); |
- close(killDebugee: true); |
+ cleanup(); |
}); |
}, |
onError: (e) { |
@@ -483,38 +484,34 @@ |
var trace = getAttachedStackTrace(e); |
if (trace != null) msg += "\nStackTrace: $trace"; |
error(msg); |
- close(killDebugee: true); |
+ cleanup(); |
}); |
} |
- void close({killDebugee: false}) { |
- void printErrorsAndExit() { |
- if (errorsDetected) throw "Errors detected"; |
- exit(errors.length); |
- } |
- if (errorsDetected) { |
- for (int i = 0; i < errors.length; i++) print(errors[i]); |
- } |
+ void cleanup() { |
+ if (cleanupDone) return; |
if (socket != null) { |
socket.close().catchError((error) { |
- print("Error occured while closing socket: $error"); |
+ // Print this directly in addition to adding it to the |
+ // error message queue, in case the error message queue |
+ // gets printed before this error handler is called. |
+ print("Error occurred while closing socket: $error"); |
+ error("Error while closing socket: $error"); |
}); |
} |
- if (killDebugee) { |
- if (!targetProcess.kill()) { |
- print("Could not send kill signal to target process."); |
- } else { |
- print("Successfully sent kill signal to target process."); |
+ targetProcess.kill(); |
+ // If the process was already dead exitCode is already |
+ // available and we call exit() in the next event loop cycle. |
+ // Otherwise this will wait for the process to exit. |
+ targetProcess.exitCode.then((exitCode) { |
+ if (errorsDetected) { |
+ print("\n===== Errors detected: ====="); |
+ for (int i = 0; i < errors.length; i++) print(errors[i]); |
+ print("============================\n"); |
} |
- // If the process was already dead exitCode is already |
- // available and we call exit() in the next event loop cycle. |
- // Otherwise this will wait for the process to exit. |
- targetProcess.exitCode.then((exitCode) { |
- printErrorsAndExit(); |
- }); |
- } else { |
- printErrorsAndExit(); |
- } |
+ exit(errors.length); |
+ }); |
+ cleanupDone = true; |
} |
} |