aboutsummaryrefslogtreecommitdiff
path: root/build2/utility.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-12-17 08:53:02 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-12-17 08:53:02 +0200
commit8065636673e85704f5aab3ce3674dea729cd2a86 (patch)
tree12ac57f7186a13eb0ce99a4e92ac9b3a8c645d86 /build2/utility.cxx
parent733aa97b5c0024a7856df7a571b542742f0f3e65 (diff)
Trace non-zero process exit code
Also convert to using operator<<(ostream,process_exit).
Diffstat (limited to 'build2/utility.cxx')
-rw-r--r--build2/utility.cxx12
1 files changed, 9 insertions, 3 deletions
diff --git a/build2/utility.cxx b/build2/utility.cxx
index e8e5fe9..8d63059 100644
--- a/build2/utility.cxx
+++ b/build2/utility.cxx
@@ -240,21 +240,27 @@ namespace build2
run_finish (const char* args[], process& pr, bool err, const string& l)
try
{
+ tracer trace ("run_finish");
+
if (pr.wait ())
return true;
const process_exit& e (*pr.exit);
if (!e.normal ())
- fail << "process " << args[0] << " terminated abnormally: "
- << e.description () << (e.core () ? " (core dumped)" : "");
+ fail << "process " << args[0] << " " << e;
// Normall but non-zero exit status.
//
if (err)
- // Assuming diagnostics has already been issued (to STDERR).
+ {
+ // While we assuming diagnostics has already been issued (to STDERR), if
+ // that's not the case, it's a real pain to debug. So trace it.
//
+ l4 ([&]{trace << "process " << args[0] << " " << e;});
+
throw failed ();
+ }
// Even if the user asked to suppress diagnostiscs, one error that we
// want to let through is the inability to execute the program itself.