Skip to content

Commit 0a9bba6

Browse files
committed
fix tool main exception reporting
Wrap modified tool entry points in try/catch so runtime validation and I/O exceptions produce clear, tool-prefixed error messages and non-zero exits instead of uncaught termination.
1 parent b9b8efb commit 0a9bba6

7 files changed

Lines changed: 143 additions & 86 deletions

File tree

tools/adapt/adapt.cc

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,21 @@ std::pair<Sign, std::string> cmd_line(int argc, char *argv[]) {
5050
}
5151

5252
int main(int argc, char *argv[]) {
53-
const clock_t start_clock = clock();
54-
about();
55-
help(argc, argv, usage);
56-
const auto [sign, param_fn] = cmd_line(argc, argv);
57-
Params P(param_fn);
58-
Adapt calc(P, sign);
59-
calc.run();
60-
const clock_t end_clock = clock();
61-
std::cout << "# Elapsed " << double(end_clock - start_clock) / CLOCKS_PER_SEC << " s" << std::endl;
53+
try {
54+
const clock_t start_clock = clock();
55+
about();
56+
help(argc, argv, usage);
57+
const auto [sign, param_fn] = cmd_line(argc, argv);
58+
Params P(param_fn);
59+
Adapt calc(P, sign);
60+
calc.run();
61+
const clock_t end_clock = clock();
62+
std::cout << "# Elapsed " << double(end_clock - start_clock) / CLOCKS_PER_SEC << " s" << std::endl;
63+
} catch (const std::exception &e) {
64+
std::cerr << "adapt: error: " << e.what() << std::endl;
65+
return EXIT_FAILURE;
66+
} catch (...) {
67+
std::cerr << "adapt: error: unknown exception" << std::endl;
68+
return EXIT_FAILURE;
69+
}
6270
}

tools/binavg/binavg.cc

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
#include <iostream>
22
#include <iomanip>
33
#include <string_view>
4+
#include <cstdlib>
45
#include "binavg.hpp"
56

67
constexpr std::string_view VERSION = "0.0.2";
78
const int cout_PREC = 18; // Precision for verbose reporting on console
89

910
int main(int argc, char *argv[]) {
10-
std::cout << "binvag - binned binary data averaging tool - " << VERSION << std::endl;
11-
std::cout << "Rok Zitko, rok.zitko@ijs.si, 2013" << std::endl;
12-
std::cout << std::setprecision(cout_PREC);
13-
NRG::BinAvg::BinAvg binavg(argc, argv);
14-
binavg.calc();
11+
try {
12+
std::cout << "binvag - binned binary data averaging tool - " << VERSION << std::endl;
13+
std::cout << "Rok Zitko, rok.zitko@ijs.si, 2013" << std::endl;
14+
std::cout << std::setprecision(cout_PREC);
15+
NRG::BinAvg::BinAvg binavg(argc, argv);
16+
binavg.calc();
17+
} catch (const std::exception &e) {
18+
std::cerr << "binavg: error: " << e.what() << std::endl;
19+
return EXIT_FAILURE;
20+
} catch (...) {
21+
std::cerr << "binavg: error: unknown exception" << std::endl;
22+
return EXIT_FAILURE;
23+
}
1524
}

tools/broaden/broaden.cc

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@
22
#include "broaden.hpp"
33

44
int main(int argc, char *argv[]) {
5-
std::cout << "broaden - finite-temperature broadening tool" << std::endl;
6-
NRG::Broaden::Broaden broaden(argc, argv);
7-
broaden.calc();
5+
try {
6+
std::cout << "broaden - finite-temperature broadening tool" << std::endl;
7+
NRG::Broaden::Broaden broaden(argc, argv);
8+
broaden.calc();
9+
} catch (const std::exception &e) {
10+
std::cerr << "broaden: error: " << e.what() << std::endl;
11+
return 1;
12+
} catch (...) {
13+
std::cerr << "broaden: error: unknown exception" << std::endl;
14+
return 1;
15+
}
816
}

tools/bw/bw.cc

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -653,63 +653,71 @@ void defaults() {
653653
}
654654

655655
int main(int argc, char *argv[]) {
656-
cout << "bw - Adaptive broadening tool - " << VERSION << endl;
657-
cout << "Rok Zitko, rok.zitko@ijs.si, 2009-2010" << endl;
658-
cout << setprecision(16);
656+
try {
657+
cout << "bw - Adaptive broadening tool - " << VERSION << endl;
658+
cout << "Rok Zitko, rok.zitko@ijs.si, 2009-2010" << endl;
659+
cout << setprecision(16);
659660

660-
cmd_line(argc, argv);
661-
defaults();
662-
read_files();
663-
merge();
661+
cmd_line(argc, argv);
662+
defaults();
663+
read_files();
664+
merge();
664665

665-
make_mesh(mesh);
666-
initial_b(b);
666+
make_mesh(mesh);
667+
initial_b(b);
667668

668-
if (savemore) { save("b", vfreq, b, 0, trim); }
669+
if (savemore) { save("b", vfreq, b, 0, trim); }
669670

670-
for (int iter = 1; iter <= nr_iter; iter++) {
671-
broaden(mesh, a, b);
671+
for (int iter = 1; iter <= nr_iter; iter++) {
672+
broaden(mesh, a, b);
672673

673-
if (savemore || iter == nr_iter) { save("a", mesh, a, iter, trim); }
674+
if (savemore || iter == nr_iter) { save("a", mesh, a, iter, trim); }
674675

675-
integrate_a(a, mesh, inta);
676-
if (saveall) { save("inta", mesh, inta, iter); }
676+
integrate_a(a, mesh, inta);
677+
if (saveall) { save("inta", mesh, inta, iter); }
677678

678-
// inta = \int [-infty, omega]
679-
// intb = \int [0, omega]
680-
// intc = \int [+infty, omega]
681-
combinations(mesh, inta, intb, intc);
682-
if (saveall) {
683-
save("intb", mesh, intb, iter);
684-
save("intc", mesh, intc, iter);
685-
}
679+
// inta = \int [-infty, omega]
680+
// intb = \int [0, omega]
681+
// intc = \int [+infty, omega]
682+
combinations(mesh, inta, intb, intc);
683+
if (saveall) {
684+
save("intb", mesh, intb, iter);
685+
save("intc", mesh, intc, iter);
686+
}
686687

687-
vec deriva, derivb, derivc;
688+
vec deriva, derivb, derivc;
688689

689-
calc_deriv(inta, deriva);
690-
calc_deriv(intb, derivb);
691-
calc_deriv(intc, derivc);
690+
calc_deriv(inta, deriva);
691+
calc_deriv(intb, derivb);
692+
calc_deriv(intc, derivc);
692693

693-
if (saveall) {
694-
save("deriva", mesh, deriva, iter);
695-
save("derivb", mesh, derivb, iter);
696-
save("derivc", mesh, derivc, iter);
697-
}
694+
if (saveall) {
695+
save("deriva", mesh, deriva, iter);
696+
save("derivb", mesh, derivb, iter);
697+
save("derivc", mesh, derivc, iter);
698+
}
698699

699-
vec bpos;
700-
calc_b(derivb, derivc, bpos);
700+
vec bpos;
701+
calc_b(derivb, derivc, bpos);
701702

702-
vec bneg;
703-
calc_b(deriva, derivb, bneg);
703+
vec bneg;
704+
calc_b(deriva, derivb, bneg);
704705

705-
recalc_b(mesh, bpos, bneg, b);
706+
recalc_b(mesh, bpos, bneg, b);
706707

707-
if (saveall) {
708-
save("bpos", mesh, bpos, iter);
709-
save("bneg", mesh, bneg, iter);
710-
}
711-
if (savemore) { save("b", vfreq, b, iter, trim); }
708+
if (saveall) {
709+
save("bpos", mesh, bpos, iter);
710+
save("bneg", mesh, bneg, iter);
711+
}
712+
if (savemore) { save("b", vfreq, b, iter, trim); }
712713

713-
if (dyn_mesh > 0.0) { refine_mesh(mesh, a); }
714+
if (dyn_mesh > 0.0) { refine_mesh(mesh, a); }
715+
}
716+
} catch (const std::exception &e) {
717+
cerr << "bw: error: " << e.what() << endl;
718+
return EXIT_FAILURE;
719+
} catch (...) {
720+
cerr << "bw: error: unknown exception" << endl;
721+
return EXIT_FAILURE;
714722
}
715723
}

tools/kk/kk.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
#include "kk.hpp"
22

33
int main(int argc, char *argv[]) {
4-
NRG::KK::KK kk(argc, argv);
4+
try {
5+
NRG::KK::KK kk(argc, argv);
6+
} catch (const std::exception &e) {
7+
std::cerr << "kk: error: " << e.what() << std::endl;
8+
return 1;
9+
} catch (...) {
10+
std::cerr << "kk: error: unknown exception" << std::endl;
11+
return 1;
12+
}
513
}

tools/mats/mats.cc

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,22 @@ void save(const string filename, const cvec &x, const cvec &y) {
246246
}
247247

248248
int main(int argc, char *argv[]) {
249-
cout << "mats - thermal Green's function evaluation tool - " << VERSION << endl;
250-
cout << "Rok Zitko, rok.zitko@ijs.si, Nov 2012" << endl;
251-
cout << setprecision(COUT_PREC);
252-
cmd_line(argc, argv);
253-
read_files();
254-
merge();
255-
make_mesh(mesh);
256-
compute(mesh, G);
257-
string output = "spec.dat";
258-
save(output, mesh, G);
249+
try {
250+
cout << "mats - thermal Green's function evaluation tool - " << VERSION << endl;
251+
cout << "Rok Zitko, rok.zitko@ijs.si, Nov 2012" << endl;
252+
cout << setprecision(COUT_PREC);
253+
cmd_line(argc, argv);
254+
read_files();
255+
merge();
256+
make_mesh(mesh);
257+
compute(mesh, G);
258+
string output = "spec.dat";
259+
save(output, mesh, G);
260+
} catch (const std::exception &e) {
261+
cerr << "mats: error: " << e.what() << endl;
262+
return EXIT_FAILURE;
263+
} catch (...) {
264+
cerr << "mats: error: unknown exception" << endl;
265+
return EXIT_FAILURE;
266+
}
259267
}

tools/nrgchain/nrgchain.cc

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -529,22 +529,30 @@ void calc_tables() {
529529
}
530530

531531
int main(int argc, char *argv[]) {
532-
clock_t start_clock = clock();
532+
try {
533+
clock_t start_clock = clock();
534+
535+
about();
536+
cmd_line(argc, argv);
537+
parser(param_fn);
538+
set_parameters();
539+
cmd_line_post(argc, argv);
540+
541+
if (nrgchain_tables_load) {
542+
load_tables();
543+
} else {
544+
calc_tables();
545+
}
533546

534-
about();
535-
cmd_line(argc, argv);
536-
parser(param_fn);
537-
set_parameters();
538-
cmd_line_post(argc, argv);
547+
if (nrgchain_tridiag) tridiag();
539548

540-
if (nrgchain_tables_load) {
541-
load_tables();
542-
} else {
543-
calc_tables();
549+
clock_t end_clock = clock();
550+
cout << "# Elapsed " << double(end_clock - start_clock) / CLOCKS_PER_SEC << " s" << endl;
551+
} catch (const std::exception &e) {
552+
cerr << "nrgchain: error: " << e.what() << endl;
553+
return EXIT_FAILURE;
554+
} catch (...) {
555+
cerr << "nrgchain: error: unknown exception" << endl;
556+
return EXIT_FAILURE;
544557
}
545-
546-
if (nrgchain_tridiag) tridiag();
547-
548-
clock_t end_clock = clock();
549-
cout << "# Elapsed " << double(end_clock - start_clock) / CLOCKS_PER_SEC << " s" << endl;
550558
}

0 commit comments

Comments
 (0)