Skip to content

Commit 3c7214b

Browse files
committed
Auto merge of #6532 - alexcrichton:statuses, r=dwijnand
Add helpful text for Windows exceptions like Unix On Unix if a process exits with a signal we'll print out which signal as well as a small description of what happened, and this applies the same logic to Windows. A few exit statuses are elaborated to their human readable names (like `STATUS_ACCESS_VIOLATION`) to help for quick debugging.
2 parents b06b114 + 4a42e47 commit 3c7214b

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/cargo/util/errors.rs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,47 @@ pub fn process_error(
337337

338338
#[cfg(windows)]
339339
fn status_to_string(status: ExitStatus) -> String {
340-
status.to_string()
340+
use winapi::um::winnt::*;
341+
use winapi::shared::minwindef::DWORD;
342+
343+
let mut base = status.to_string();
344+
let extra = match status.code().unwrap() as DWORD {
345+
STATUS_ACCESS_VIOLATION => "STATUS_ACCESS_VIOLATION",
346+
STATUS_IN_PAGE_ERROR => "STATUS_IN_PAGE_ERROR",
347+
STATUS_INVALID_HANDLE => "STATUS_INVALID_HANDLE",
348+
STATUS_INVALID_PARAMETER => "STATUS_INVALID_PARAMETER",
349+
STATUS_NO_MEMORY => "STATUS_NO_MEMORY",
350+
STATUS_ILLEGAL_INSTRUCTION => "STATUS_ILLEGAL_INSTRUCTION",
351+
STATUS_NONCONTINUABLE_EXCEPTION => "STATUS_NONCONTINUABLE_EXCEPTION",
352+
STATUS_INVALID_DISPOSITION => "STATUS_INVALID_DISPOSITION",
353+
STATUS_ARRAY_BOUNDS_EXCEEDED => "STATUS_ARRAY_BOUNDS_EXCEEDED",
354+
STATUS_FLOAT_DENORMAL_OPERAND => "STATUS_FLOAT_DENORMAL_OPERAND",
355+
STATUS_FLOAT_DIVIDE_BY_ZERO => "STATUS_FLOAT_DIVIDE_BY_ZERO",
356+
STATUS_FLOAT_INEXACT_RESULT => "STATUS_FLOAT_INEXACT_RESULT",
357+
STATUS_FLOAT_INVALID_OPERATION => "STATUS_FLOAT_INVALID_OPERATION",
358+
STATUS_FLOAT_OVERFLOW => "STATUS_FLOAT_OVERFLOW",
359+
STATUS_FLOAT_STACK_CHECK => "STATUS_FLOAT_STACK_CHECK",
360+
STATUS_FLOAT_UNDERFLOW => "STATUS_FLOAT_UNDERFLOW",
361+
STATUS_INTEGER_DIVIDE_BY_ZERO => "STATUS_INTEGER_DIVIDE_BY_ZERO",
362+
STATUS_INTEGER_OVERFLOW => "STATUS_INTEGER_OVERFLOW",
363+
STATUS_PRIVILEGED_INSTRUCTION => "STATUS_PRIVILEGED_INSTRUCTION",
364+
STATUS_STACK_OVERFLOW => "STATUS_STACK_OVERFLOW",
365+
STATUS_DLL_NOT_FOUND => "STATUS_DLL_NOT_FOUND",
366+
STATUS_ORDINAL_NOT_FOUND => "STATUS_ORDINAL_NOT_FOUND",
367+
STATUS_ENTRYPOINT_NOT_FOUND => "STATUS_ENTRYPOINT_NOT_FOUND",
368+
STATUS_CONTROL_C_EXIT => "STATUS_CONTROL_C_EXIT",
369+
STATUS_DLL_INIT_FAILED => "STATUS_DLL_INIT_FAILED",
370+
STATUS_FLOAT_MULTIPLE_FAULTS => "STATUS_FLOAT_MULTIPLE_FAULTS",
371+
STATUS_FLOAT_MULTIPLE_TRAPS => "STATUS_FLOAT_MULTIPLE_TRAPS",
372+
STATUS_REG_NAT_CONSUMPTION => "STATUS_REG_NAT_CONSUMPTION",
373+
STATUS_HEAP_CORRUPTION => "STATUS_HEAP_CORRUPTION",
374+
STATUS_STACK_BUFFER_OVERRUN => "STATUS_STACK_BUFFER_OVERRUN",
375+
STATUS_ASSERTION_FAILURE => "STATUS_ASSERTION_FAILURE",
376+
_ => return base,
377+
};
378+
base.push_str(", ");
379+
base.push_str(extra);
380+
base
341381
}
342382
}
343383

0 commit comments

Comments
 (0)