diff options
| author | 2020-02-06 19:02:33 -0500 | |
|---|---|---|
| committer | 2022-03-29 12:01:34 +0200 | |
| commit | fa85bb4fb05caf4f1fb35aef3a6f0de6083b9722 (patch) | |
| tree | a4e64acc13435ef25765c99955337e7f7a9e9e0c | |
| parent | b08be09c0da5ab6a68cc6079bd35d895ba2f8b99 (diff) | |
| download | libimobiledevice-fa85bb4fb05caf4f1fb35aef3a6f0de6083b9722.tar.gz libimobiledevice-fa85bb4fb05caf4f1fb35aef3a6f0de6083b9722.tar.bz2 | |
implement as documented
| -rw-r--r-- | tools/idevicedebug.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/tools/idevicedebug.c b/tools/idevicedebug.c index 24cc46d..a5559e1 100644 --- a/tools/idevicedebug.c +++ b/tools/idevicedebug.c | |||
| @@ -115,6 +115,9 @@ static debugserver_error_t debugserver_client_handle_response(debugserver_client | |||
| 115 | char* o = NULL; | 115 | char* o = NULL; |
| 116 | char* r = *response; | 116 | char* r = *response; |
| 117 | 117 | ||
| 118 | /* Documentation of response codes can be found here: | ||
| 119 | https://github.com/llvm/llvm-project/blob/4fe839ef3a51e0ea2e72ea2f8e209790489407a2/lldb/docs/lldb-gdb-remote.txt#L1269 */ | ||
| 120 | |||
| 118 | if (r[0] == 'O') { | 121 | if (r[0] == 'O') { |
| 119 | /* stdout/stderr */ | 122 | /* stdout/stderr */ |
| 120 | debugserver_decode_string(r + 1, strlen(r) - 1, &o); | 123 | debugserver_decode_string(r + 1, strlen(r) - 1, &o); |
| @@ -148,22 +151,8 @@ static debugserver_error_t debugserver_client_handle_response(debugserver_client | |||
| 148 | return dres; | 151 | return dres; |
| 149 | 152 | ||
| 150 | dres = DEBUGSERVER_E_UNKNOWN_ERROR; | 153 | dres = DEBUGSERVER_E_UNKNOWN_ERROR; |
| 151 | } else if (r[0] == 'E' || r[0] == 'W') { | 154 | } else if (r[0] == 'E') { |
| 152 | /* dogben: 'W' + hex-encoded byte seems to mean "process exited with this status." */ | 155 | printf("ERROR: %s\n", r + 1); |
| 153 | if (r[0] == 'W' && strlen(r) == 3 && exit_status != NULL) { | ||
| 154 | debugserver_decode_string(r + 1, strlen(r) - 1, &o); | ||
| 155 | if (o != NULL) { | ||
| 156 | printf("Exit status: %u\n", o[0]); | ||
| 157 | *exit_status = o[0]; | ||
| 158 | free(o); | ||
| 159 | o = NULL; | ||
| 160 | free(*response); | ||
| 161 | *response = NULL; | ||
| 162 | return dres; | ||
| 163 | } | ||
| 164 | } | ||
| 165 | |||
| 166 | printf("%s: %s\n", (r[0] == 'E' ? "ERROR": "WARNING") , r + 1); | ||
| 167 | 156 | ||
| 168 | free(*response); | 157 | free(*response); |
| 169 | *response = NULL; | 158 | *response = NULL; |
| @@ -177,6 +166,18 @@ static debugserver_error_t debugserver_client_handle_response(debugserver_client | |||
| 177 | log_debug("result: %d", dres); | 166 | log_debug("result: %d", dres); |
| 178 | debugserver_command_free(command); | 167 | debugserver_command_free(command); |
| 179 | command = NULL; | 168 | command = NULL; |
| 169 | } else if (r[0] == 'W' || r[0] == 'X') { | ||
| 170 | /* process exited */ | ||
| 171 | debugserver_decode_string(r + 1, strlen(r) - 1, &o); | ||
| 172 | if (o != NULL) { | ||
| 173 | printf("Exit %s: %u\n", (r[0] == 'W' ? "status" : "due to signal"), o[0]); | ||
| 174 | *exit_status = o[0] + (r[0] == 'W' ? 0 : 128); | ||
| 175 | free(o); | ||
| 176 | o = NULL; | ||
| 177 | } | ||
| 178 | free(*response); | ||
| 179 | *response = NULL; | ||
| 180 | return dres; | ||
| 180 | } else if (r && strlen(r) == 0) { | 181 | } else if (r && strlen(r) == 0) { |
| 181 | if (!send_reply) | 182 | if (!send_reply) |
| 182 | return dres; | 183 | return dres; |
| @@ -520,7 +521,7 @@ int main(int argc, char *argv[]) | |||
| 520 | dres = debugserver_client_handle_response(debugserver_client, &response, 1, &exit_status); | 521 | dres = debugserver_client_handle_response(debugserver_client, &response, 1, &exit_status); |
| 521 | } | 522 | } |
| 522 | } | 523 | } |
| 523 | if (exit_status > 0) { | 524 | if (exit_status >= 0) { |
| 524 | goto cleanup; | 525 | goto cleanup; |
| 525 | } | 526 | } |
| 526 | 527 | ||
