cli: Added --crash cli option (#126) (#139)

If a assert fails and --crash is given, the debugger will trapped in
this assert using debugbreak.h from the new debugbreak submodule.
This commit is contained in:
a1lu 2016-08-22 10:17:55 +02:00 committed by Franklin Mathieu
parent 15b221ac09
commit 25d444b1b9
7 changed files with 24 additions and 0 deletions

3
.gitmodules vendored
View file

@ -19,3 +19,6 @@
[submodule "dependencies/nanomsg-patched"]
path = dependencies/nanomsg-patched
url = https://github.com/Snaipe/nanomsg.git
[submodule "dependencies/debugbreak"]
path = dependencies/debugbreak
url = https://github.com/scottt/debugbreak

View file

@ -55,6 +55,7 @@ include_directories(
dependencies/valgrind/include/
dependencies/klib/
dependencies/nanopb/
dependencies/debugbreak/
)
# Coverage

1
dependencies/debugbreak vendored Submodule

@ -0,0 +1 @@
Subproject commit 6b79ec8d8f8d4603111f580a0537f8f31c484c32

View file

@ -116,6 +116,14 @@ struct criterion_options {
* default: false
*/
bool wait_for_clients;
/**
* Raise a debug trap to crash the test if an assert fails so that a
* debugger can gain control.
*
* default: false
*/
bool crash;
};
CR_BEGIN_C_API

View file

@ -27,11 +27,16 @@
#include "protocol/messages.h"
#include "criterion/internal/asprintf-compat.h"
#include "criterion/criterion.h"
#include "criterion/options.h"
#include "io/event.h"
#include "debugbreak.h"
jmp_buf g_pre_test;
void criterion_abort_test(void) {
if (criterion_options.crash)
debug_break();
longjmp(g_pre_test, 1);
}

View file

@ -68,6 +68,8 @@
"prematurely after the test\n" \
" --verbose[=level]: sets verbosity to level " \
"(1 by default)\n" \
" --crash: crash failing assertions rather than " \
"aborting (for debugging purposes)\n" \
" -OP:F or --output=PROVIDER=FILE: write test " \
"report to FILE using the specified provider\n"
@ -148,6 +150,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) {
{"no-early-exit", no_argument, 0, 'z'},
{"output", required_argument, 0, 'O'},
{"wait", no_argument, 0, 'w'},
{"crash", no_argument, 0, 'c'},
{0, 0, 0, 0 }
};
@ -271,6 +274,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) {
} break;
case 'w': criterion_options.wait_for_clients = true; break;
case '?':
case 'c': criterion_options.crash = true; break;
default : do_print_usage = handle_unknown_arg; break;
}
}

View file

@ -19,6 +19,7 @@ Display the help message
--always-succeed: always exit with 0
--no-early-exit: do not exit the test worker prematurely after the test
--verbose[=level]: sets verbosity to level (1 by default)
--crash: crash failing assertions rather than aborting (for debugging purposes)
-OP:F or --output=PROVIDER=FILE: write test report to FILE using the specified provider
$ simple.cc.bin --help
@ -40,6 +41,7 @@ Display the help message
--always-succeed: always exit with 0
--no-early-exit: do not exit the test worker prematurely after the test
--verbose[=level]: sets verbosity to level (1 by default)
--crash: crash failing assertions rather than aborting (for debugging purposes)
-OP:F or --output=PROVIDER=FILE: write test report to FILE using the specified provider