diff --git a/tools/ade b/tools/ade
index 7cda4e3f4520a8604107adea6122ae069b9b0d28..70ab3ee9c7db184f5ca33ae661f12f16e65f11a1 100755
--- a/tools/ade
+++ b/tools/ade
@@ -105,6 +105,19 @@ class NotSupportedError(Exception):
     def __init__(self):
         pass
 
+class CommandFailedError(Exception):
+    def __init__(self, stdout, stderr, exit_status):
+        self.stdout = stdout
+        self.stderr = stderr
+        self.exit_status = exit_status
+
+    def __str__(self):
+        return """Exit code: {}
+                  Stdout: {}
+                  Stderr: {}""".format(self.exit_status,
+                                       self.stdout,
+                                       self.stderr)
+
 
 def is_valid_url(url):
     result = urlparse(url)
@@ -221,7 +234,13 @@ class Device:
     def _exec(self, *args):
         with closing(self._connect()) as ssh:
             stdin, stdout, stderr = ssh.exec_command(' '.join(args))
-            return stdout.read().decode().strip()
+            out = stdout.read().decode().strip()
+            err = stderr.read().decode().strip()
+            status = stdout.channel.recv_exit_status ()
+            if status != 0:
+                raise CommandFailedError(out, err, status)
+
+            return out
 
     def load_sysroot_version(self):
         try: