can be disabled if desired.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@414
--verbose) vgopts="$vgopts -v"; shift;;
-q) vgopts="$vgopts $arg"; shift;;
--quiet) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=no) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=yes) vgopts="$vgopts $arg"; shift;;
--check-addrVs=no) vgopts="$vgopts $arg"; shift;;
--check-addrVs=yes) vgopts="$vgopts $arg"; shift;;
--gdb-attach=no) vgopts="$vgopts $arg"; shift;;
echo " --gdb-attach=no|yes start GDB when errors detected? [no]"
echo " --demangle=no|yes automatically demangle C++ names? [yes]"
echo " --num-callers=<number> show <num> callers in stack traces [4]"
+ echo " --event-horizon=no|yes stop showing new errors if too many? [yes]"
echo " --partial-loads-ok=no|yes too hard to explain here; see manual [yes]"
echo " --leak-check=no|yes search for memory leaks at exit? [no]"
echo " --leak-resolution=low|med|high"
the burden of the error-management system becoming excessive in
extremely buggy programs, although it does make it pretty
pointless to continue the Valgrind run after this point. */
- if (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
- || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND) {
+ if (VG_(clo_event_horizon)
+ && (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
+ || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND)) {
if (!stopping_message) {
VG_(message)(Vg_UserMsg, "");
VG_(message)(Vg_UserMsg,
"Final error counts will be inaccurate. Go fix your program!");
+ VG_(message)(Vg_UserMsg,
+ "Rerun with --event-horizon=no to disable this cutoff. Note");
+ VG_(message)(Vg_UserMsg,
+ "that your program may now segfault without prior warning from");
+ VG_(message)(Vg_UserMsg,
+ "Valgrind, because errors are no longer being displayed.");
VG_(message)(Vg_UserMsg, "");
stopping_message = True;
vg_ignore_errors = True;
#define VG_CLO_MAX_SFILES 10
+/* Should we stop collecting errors if too many appear? default: YES */
+extern Bool VG_(clo_event_horizon);
/* Shall we V-check addrs (they are always A checked too): default: YES */
-extern Bool VG_(clo_check_addrVs);
+extern Bool VG_(clo_check_addrVs);
/* Enquire about whether to attach to GDB at errors? default: NO */
extern Bool VG_(clo_GDB_attach);
/* Sanity-check level: 0 = none, 1 (default), > 1 = expensive. */
Values derived from command-line options.
------------------------------------------------------------------ */
+Bool VG_(clo_event_horizon);
Bool VG_(clo_check_addrVs);
Bool VG_(clo_GDB_attach);
Int VG_(sanity_level);
# define STREQN(nn,s1,s2) (0==VG_(strncmp_ws)((s1),(s2),(nn)))
/* Set defaults. */
+ VG_(clo_event_horizon) = True;
VG_(clo_check_addrVs) = True;
VG_(clo_GDB_attach) = False;
VG_(sanity_level) = 1;
else if (STREQ(argv[i], "-q") || STREQ(argv[i], "--quiet"))
VG_(clo_verbosity)--;
+ else if (STREQ(argv[i], "--event-horizon=yes"))
+ VG_(clo_event_horizon) = True;
+ else if (STREQ(argv[i], "--event-horizon=no"))
+ VG_(clo_event_horizon) = False;
+
else if (STREQ(argv[i], "--check-addrVs=yes"))
VG_(clo_check_addrVs) = True;
else if (STREQ(argv[i], "--check-addrVs=no"))
--verbose) vgopts="$vgopts -v"; shift;;
-q) vgopts="$vgopts $arg"; shift;;
--quiet) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=no) vgopts="$vgopts $arg"; shift;;
+ --event-horizon=yes) vgopts="$vgopts $arg"; shift;;
--check-addrVs=no) vgopts="$vgopts $arg"; shift;;
--check-addrVs=yes) vgopts="$vgopts $arg"; shift;;
--gdb-attach=no) vgopts="$vgopts $arg"; shift;;
echo " --gdb-attach=no|yes start GDB when errors detected? [no]"
echo " --demangle=no|yes automatically demangle C++ names? [yes]"
echo " --num-callers=<number> show <num> callers in stack traces [4]"
+ echo " --event-horizon=no|yes stop showing new errors if too many? [yes]"
echo " --partial-loads-ok=no|yes too hard to explain here; see manual [yes]"
echo " --leak-check=no|yes search for memory leaks at exit? [no]"
echo " --leak-resolution=low|med|high"
the burden of the error-management system becoming excessive in
extremely buggy programs, although it does make it pretty
pointless to continue the Valgrind run after this point. */
- if (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
- || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND) {
+ if (VG_(clo_event_horizon)
+ && (vg_n_errs_shown >= M_VG_COLLECT_NO_ERRORS_AFTER_SHOWN
+ || vg_n_errs_found >= M_VG_COLLECT_NO_ERRORS_AFTER_FOUND)) {
if (!stopping_message) {
VG_(message)(Vg_UserMsg, "");
VG_(message)(Vg_UserMsg,
"Final error counts will be inaccurate. Go fix your program!");
+ VG_(message)(Vg_UserMsg,
+ "Rerun with --event-horizon=no to disable this cutoff. Note");
+ VG_(message)(Vg_UserMsg,
+ "that your program may now segfault without prior warning from");
+ VG_(message)(Vg_UserMsg,
+ "Valgrind, because errors are no longer being displayed.");
VG_(message)(Vg_UserMsg, "");
stopping_message = True;
vg_ignore_errors = True;
#define VG_CLO_MAX_SFILES 10
+/* Should we stop collecting errors if too many appear? default: YES */
+extern Bool VG_(clo_event_horizon);
/* Shall we V-check addrs (they are always A checked too): default: YES */
-extern Bool VG_(clo_check_addrVs);
+extern Bool VG_(clo_check_addrVs);
/* Enquire about whether to attach to GDB at errors? default: NO */
extern Bool VG_(clo_GDB_attach);
/* Sanity-check level: 0 = none, 1 (default), > 1 = expensive. */
Values derived from command-line options.
------------------------------------------------------------------ */
+Bool VG_(clo_event_horizon);
Bool VG_(clo_check_addrVs);
Bool VG_(clo_GDB_attach);
Int VG_(sanity_level);
# define STREQN(nn,s1,s2) (0==VG_(strncmp_ws)((s1),(s2),(nn)))
/* Set defaults. */
+ VG_(clo_event_horizon) = True;
VG_(clo_check_addrVs) = True;
VG_(clo_GDB_attach) = False;
VG_(sanity_level) = 1;
else if (STREQ(argv[i], "-q") || STREQ(argv[i], "--quiet"))
VG_(clo_verbosity)--;
+ else if (STREQ(argv[i], "--event-horizon=yes"))
+ VG_(clo_event_horizon) = True;
+ else if (STREQ(argv[i], "--event-horizon=no"))
+ VG_(clo_event_horizon) = False;
+
else if (STREQ(argv[i], "--check-addrVs=yes"))
VG_(clo_check_addrVs) = True;
else if (STREQ(argv[i], "--check-addrVs=no"))